我有两个线程,主线程和我创建的另一个线程来做一些工作。我不明白当我从另一个线程调用 originalContext.Post(主线程的同步上下文)时会发生什么,其中一些 UI 元素已更新,而主线程已经终止?这安全吗?为什么?
提前致谢。
我有两个线程,主线程和我创建的另一个线程来做一些工作。我不明白当我从另一个线程调用 originalContext.Post(主线程的同步上下文)时会发生什么,其中一些 UI 元素已更新,而主线程已经终止?这安全吗?为什么?
提前致谢。
这当然不会有很好的结局。这取决于实际的同步提供程序,不止一个。尝试将重点放在常见的 WindowsFormsSynchronizationContext 和 WpfSynchronizationContext 上。两者都会从队列中清除任何待处理的帖子,它们会消失得无影无踪。如果您继续发布,则 Winforms 将抛出 InvalidOperationException。Wpf 比较复杂,它可以设置 DispatcherOperation.Status 字段来表示它没有工作。但据我所知,上下文代码没有观察到这个字段,所以它应该默默地落在位桶中。
显然,您永远不希望这种情况发生。简单的解决方法是 Thread.IsBackground = true 让 CLR 清理混乱,通常不希望让程序在没有 UI 的情况下继续。