主线程终止时SynchronizationContext发生了什么?

本文关键字:发生了 什么 SynchronizationContext 线程 终止 | 更新日期: 2023-09-27 18:08:56

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

提前感谢。

主线程终止时SynchronizationContext发生了什么?

这当然不会有一个很好的结局。这取决于实际的同步提供程序,有不止一个。试图集中在共同的一点,WindowsFormsSynchronizationContext和WpfSynchronizationContext。两者都将从队列中清除所有挂起的帖子,它们将消失,不留痕迹。如果你继续张贴,那么Winforms将抛出InvalidOperationException。Wpf更复杂,它可以设置DispatcherOperation。状态字段表明它没有工作。但是据我所知,这个字段没有被上下文代码观察到,所以它应该只是静静地落在位桶中。

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