c# - 获取跨线程操作无效

标签 c# winforms multithreading exception-handling

<分区>

Possible Duplicate:
Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on

public void CheckUnusedTabs(string strTabToRemove)
{ 
    TabPage tp = TaskBarRef.tabControl1.TabPages[strTabToRemove];
    tp.Controls.Remove(this);
    TaskBarRef.tabControl1.TabPages.Remove(tp);
} 

我试图使用上面的代码关闭 Windows 应用程序的选项卡控件中的选项卡,但我遇到了错误:

Cross-thread operation not valid.

如何解决?

最佳答案

您只能从主线程更改 WinForm 控件。您需要检查控件上的 InvokeRequired 是否为真,然后根据需要调用该方法。

你可以做这样的事情来让它工作:

public void CheckUnusedTabs(string strTabToRemove)
{ 
    if (TaskBarRef.tabControl1.InvokeRequired)
    {
        TaskBarRef.tabControl1.Invoke(new Action<string>(CheckUnusedTabs), strTabToRemove);
        return;
    }      

    TabPage tp = TaskBarRef.tabControl1.TabPages[strTabToRemove];
    tp.Controls.Remove(this);
    TaskBarRef.tabControl1.TabPages.Remove(tp);
}

关于c# - 获取跨线程操作无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1523878/

相关文章:

java - Android如何同时处理多个Runnable对象

c# - 如何在 Excel 操作 Pane 中使用 WPF 控件?

多线程环境下的 ruby​​ 原子操作

C#、WebBrowser,如何在页面上的任何其他脚本之前注入(inject)并执行 JavaScript?

c# - protobuf-net 从 child 到 parent 的继承

c# - 在 C# 中,我仍然可以在新线程中使用 Windows.Forms.Timers 吗?

c# - 使用任务构造函数时无法使用结果启动任务

c# - 如何使用相同的 ListView 移动 Group 的 ListViewItem 部分来代替另一个 ListViewItem?

c# - ListView 控件呈现问题与组、复选框和 View 模式 SmallIcon

c# - VS UnitTest - 线程被中止