为什么我的Winforms应用程序中SynchronizationContext.Current是空的?

22

我刚写了这段代码:

System.Threading.SynchronizationContext.Current.Post(
    state => DoUpdateInUIThread((Abc)state), 
    abc);

但是 System.Threading.SynchronizationContext.Current 是 null

2个回答

20
为了使其正常工作。 在你的类中。
private SynchronizationContext synchronizationContext;

UI线程(主线程)中。

synchronizationContext = System.Threading.SynchronizationContext.Current;

在工作线程中

synchronizationContext.Post(    
   state => DoUpdateInUIThread((Abc)state),     
   abc);

同步上下文在工作线程中是如何实例化或传递的? - Tim
假设您在表单中使用了BackgroundWorker。如果在构造函数或加载事件中将SynchronizationContext.Current保存为类级别变量,则可以在RunWorkerCompleted处理程序中访问它。或者,如果您在另一个类(例如Presenter)中完成工作,您可以在UI线程上创建Presenter并在构造函数中保存上下文。 - Jeff B

17

参见此解释

SynchronizationContext.Current仅在主线程中设置(这是您实际上不需要它的唯一线程)

该博客文章提出了一个解决方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接