从后台线程调用UI线程上的阻塞函数

时间:2016-02-23 01:54:57

标签: c# .net multithreading

我正在构建一个应用程序,它需要能够通过回复每隔8秒发送一次保持活动的数据包来维持与服务器的连接。 此线程还应处理从服务器发送时发送的信息。 为此,我需要知道是否可能让后台线程触发一个事件,以使GUI线程用一个带有处理信息的对话框进行重写。

我遇到了麻烦,因为我当前的尝试会阻止后台线程,因此保持活动响应失败。

1

如果您需要更多详细信息,请与我们联系

1 个答案:

答案 0 :(得分:0)

您需要确保您的GUI操作在GUI线程上完成。你通常使用Invoke来做到这一点 - 周围有很多例子,但基本上它是这样的:

   private delegate void MyDelegate(int param);
   private void MyFunc(int aParam)
   {     
      // Invoke is required if we aren't on the GUI thread
      if (this.InvokeRequired)
      {
         // MyFunc will be called asynchronously on the
         // GUI thread.
         //
         this.BeginInvoke(new MyDelegate(MyFunc), 
                                          new object[] {aParam});
         return;
      }
      // We only get here if we're running on the GUI thread
      // So we can put GUI ops here safely.
    }