我有一个Windows窗体应用程序,该应用程序在启动时会通过侦听客户端的套接字连接启动新线程。
当此套接字从客户端收到一个值时,应在主父线程上使用此值,而子线程将继续运行该套接字。
这是因为:
如何在不停止子线程的情况下将值从子线程传递到父线程?
在子线程中以静态方式分配值并从主线程中获取它
过去,我这样做的方法是将要在启动时更改为子线程的变量以及一个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();
}
}
}