当主线程终止时,SynchronizationContext会发生什么?

时间:2013-04-13 19:16:43

标签: c# multithreading synchronizationcontext

我有两个主题,另一个我创建的线程来做一些工作。 我不明白当我从其他线程调用originalContext.Post(主线程的SyncronizationContext)时会发生什么,当主线程已经终止时,某些UI元素会被更新?这样安全吗?为什么?

提前致谢。

1 个答案:

答案 0 :(得分:3)

这当然不会达到很好的目的。它取决于实际的同步提供程序,有多个。试着重点关注常见问题,WindowsFormsSynchronizationContext和WpfSynchronizationContext。两者都将从队列中清除任何待处理的帖子,它们将在没有痕迹的情况下消失。如果继续发布,则Winforms将抛出InvalidOperationException。 Wpf更复杂,它可以设置DispatcherOperation.Status字段以指示它不起作用。但就我所知,上下文代码没有观察到这个字段,所以它应该只是默默地落入bit-bucket。

显然你永远不希望这种情况发生。简单的解决方法是Thread.IsBackground = true让CLR清理混乱,通常不希望程序在没有UI的情况下继续运行。