我有一个WindowsForms应用程序,它具有SynchronizationContext.Current not null
但是从那个WindowsForms应用程序中我创建了一个名为thread1的新线程
从thread1我创建另一个名为thread2的线程
当我尝试使用SynchronizationContext.Current从thread1中的thread2 POST方法时,将失败,因为SynchronizationContext.Current为null
请给我一个解决方案,将一个方法从thread2发布到thread1,但是异步
答案 0 :(得分:0)
由于thread1位于将处理已发布消息的同步上下文中,因此您需要使用thread1的同步上下文进行发布。 (将同步上下文视为消息接收器。)因此,您需要以某种方式将thread1的同步上下文传递给thread2。一种方法是使用ParameterisedThreadStart委托将其作为参数传递给thread2:
private void Thread2Func(object obj)
{
SynchronizationContext parentThread = (SynchronizationContext)obj;
// ...
parentThread.Post(someCallback, someState);
}
并在thread1中:
thread2 = new Thread(Thread2Func);
thread2.Start(SynchronizationContext.Current);