从不同的线程C#访问组件

时间:2011-06-06 13:08:41

标签: winforms multithreading

我有一个带有按钮的窗体。我有2个线程,我想从另一个线程更改按钮名称。当我这样做时,我收到一个错误。 如何更改按钮名称?

P.S。我知道alr​​edy发布了同样的问题,但那里的解决方案无法帮助我。我不能使用Dispatcher,也许是因为我使用.NET 2.0(我必须......)。

2 个答案:

答案 0 :(得分:1)

delegate void MyDelegate(string x);

void ChangeName(string name)
{
   if (this.InvokeRequired)
   {
     this.Invoke(new MyDelegate(this.ChangeName), new object[]{name});
     return;
   }
   this.button.Text = name;
}

这里有更多信息 How to update the GUI from another thread in C#?

答案 1 :(得分:0)

你需要看看:

InvokeRequired and 
Invoke

实际控制方法。 InvokeRequired将告诉您是否需要通过调用来执行此操作(即,它是从不是UIThread的线程调用的),并且调用将执行操作。

它与Dispatcher没有什么不同,除了责任落在控件本身而不是其他类。