問題

當您從表單中訂閱物件上的事件時,基本上是將回調方法的控制權移交給事件源。您不知道該事件源是否會選擇在不同的執行緒上觸發事件。

問題是,當呼叫回撥時,不能假設您可以對錶單進行更新控制元件,因為如果在不同於執行緒的執行緒上呼叫事件回撥,有時這些控制元件會丟擲異常。

  最佳答案

為了簡化 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