c# - 当主线程终止时 SynchronizationContext 会发生什么?

标签 c# multithreading synchronizationcontext

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

提前致谢。

最佳答案

这当然不会有好结果。这取决于实际的同步提供者,不止一个。尝试将重点放在常见的 WindowsFormsSynchronizationContext 和 WpfSynchronizationContext 上。两者都会从队列中清除所有待处理的帖子,它们会消失得无影无踪。如果您继续发帖,Winforms 将抛出 InvalidOperationException。 Wpf 比较复杂,它可以设置 DispatcherOperation.Status 字段来指示它没有工作。但据我所知,这个字段没有被上下文代码观察到,所以它应该静静地落在位桶中。

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

关于c# - 当主线程终止时 SynchronizationContext 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15991847/

相关文章:

c# - 如何获取特定 WPF 窗口的当前 SynchronizationContext?

c# - 创建对象:时出现错误 "an explicit conversion exists (are you missing a cast )"

c# - "The image format is unrecognized"取决于显示器

python - 是否有任何理由使用 Python threading.local() 而不是 ContextVar(在 >= 3.7 中)

c - 我如何跟踪所有 fork()

async-await - 在 Azure Functions 中等待异步调用时,ConfigureAwait(false) 是否需要/有益

c# - 额外的 using 语句会影响编译时间吗?

c# - 使用 PostSharp 在 C# 中面向方面的设计模式 Cuckoo's Egg

c++ - 我可以从第三个线程监控 boost::lockfree::spsc_queue 吗?

c# - 仅在任务 RanToCompletion 上使用 SynchronizationContext