C# 线程中的C线程:如何获取SynchronizationContext.Current?

C# 线程中的C线程:如何获取SynchronizationContext.Current?,c#,multithreading,asynchronous,ynchronizationontext,C#,Multithreading,Asynchronous,Ynchronizationontext,我有一个WindowsForms应用程序,其中包含SynchronizationContext。当前值不为null 但从WindowsForms应用程序中,我创建了一个名为thread1的新线程 从thread1我创建了另一个名为thread2的线程 当我尝试使用SynchronizationContext.Current从thread1中的thread2发布方法时,将失败,因为SynchronizationContext.Current为null 请给我一个解决方案,将方法从thread2发布

我有一个WindowsForms应用程序,其中包含SynchronizationContext。当前值不为null 但从WindowsForms应用程序中,我创建了一个名为thread1的新线程 从thread1我创建了另一个名为thread2的线程 当我尝试使用SynchronizationContext.Current从thread1中的thread2发布方法时,将失败,因为SynchronizationContext.Current为null
请给我一个解决方案,将方法从thread2发布到thread1,但异步发布

,因为thread1位于将处理发布消息的同步上下文中,所以您需要使用thread1的同步上下文进行发布。将同步上下文视为消息接收器。因此,您需要以某种方式将thread1的同步上下文传递给thread2。一种方法是使用ParameterizedThreadStart委托将其作为参数传递给thread2:

private void Thread2Func(object obj)
{
  SynchronizationContext parentThread = (SynchronizationContext)obj;
  // ...
  parentThread.Post(someCallback, someState);
}
在线程1中:

thread2 = new Thread(Thread2Func);
thread2.Start(SynchronizationContext.Current);

但是如果我使用WindowsForm中的SynchronizationContext,我认为POST方法会将其发布到UI线程,但我想将其从thread2发布到Thread1一般来说,您不能将消息发布到尚未移交到同步上下文(如消息循环或调度程序)的线程,因为线程无法拾取消息。根据您的设计,您可以让thread1输入同步上下文,例如通过调用Dispatcher.Run,或者您可能必须创建自己的同步上下文并编写thread1代码,以便在适当的时间等待该上下文。