C#Thread in Thread:如何获取SynchronizationContext.Current?

时间:2009-10-06 23:08:54

标签: c# multithreading asynchronous ynchronizationontext

我有一个WindowsForms应用程序,它具有SynchronizationContext.Current not null
但是从那个WindowsForms应用程序中我创建了一个名为thread1的新线程 从thread1我创建另一个名为thread2的线程 当我尝试使用SynchronizationContext.Current从thread1中的thread2 POST方法时,将失败,因为SynchronizationContext.Current为null

请给我一个解决方案,将一个方法从thread2发布到thread1,但是异步

1 个答案:

答案 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);