c#在不退出子线程的情况下将值从子线程传递到父线程

问题描述 投票:0回答:2

我有一个Windows窗体应用程序,该应用程序在启动时会通过侦听客户端的套接字连接启动新线程。

当此套接字从客户端收到一个值时,应在主父线程上使用此值,而子线程将继续运行该套接字。

这是因为:

  • 当套接字接收到该值时,它将调用一个事件处理程序,并在之后调用一长串方法。这些方法将接收到的值添加到现有数据结构中并更改UI。
  • 我需要将此值添加到的对象在子线程中似乎为空。因此,我想我需要将值传递回父线程-而不停止子线程。
  • 仅从线程返回值似乎不是解决方案,因为这会阻止套接字运行。

如何在不停止子线程的情况下将值从子线程传递到父线程?

c# multithreading sockets
2个回答
0
投票

在子线程中以静态方式分配值并从主线程中获取它


0
投票

过去,我这样做的方法是将要在启动时更改为子线程的变量以及一个AutoResetEvent传递给子线程,该AutoResetEvent可用于向父对象发出该子对象具有新值的信号。] >

public class CommunicationsBlock {
   public AutoResetEvent ValueReady {get; set;}
   public object NewValue {get; set;}
}

(in parent)

var cb = new CommunicationsBlock {
   ValueReady = new AutoResetEvent(false)
};

var child = new Thread(ChildThread);
child.Start(cb);
while (true)
{
   if (cb.ValueReady.WaitOne(TimeSpan.FromMilliseconds(10)))
   {
      // We have a new value
   }
}

(child thread)
private static void ChildThread(object state)
{
   var cb = (CommunicationsBlock) state;
   while (true)
   {
      // some stuff
      if (readytosend)
      {
         cb.NewValue = new object();
         cb.ValueReady.Set();
      }
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.