问题

当您从表单中订阅对象上的事件时,基本上是将回调方法的控制权移交给事件源。您不知道该事件源是否会选择在不同的线程上触发事件。

问题是,当调用回调时,不能假设您可以对表单进行更新控件,因为如果在不同于线程的线程上调用事件回调,有时这些控件会抛出异常。

  最佳答案

为了简化 Simon 的代码,您可以使用内置的通用 Action 委托。

 void SomethingHappened(object sender, EventArgs ea)
{
   if (InvokeRequired)
   {
      Invoke(new Action<object, EventArgs>(SomethingHappened), sender, ea);
      return;
   }

   textBox1.Text = "Something happened";
}
 

  相同标签的其他问题

c#.netwinformsmultithreadingevents