c# – 从给定的线程获取SynchronizationContext

我似乎没有找到如何获取给定线程的SynchronizationContext:

Thread uiThread = UIConfiguration.UIThread;
SynchronizationContext context = uiThread.Huh?;

我为什么需要那个?

因为我需要从前端应用程序的不同位置发布到UIThread.所以我在名为UIConfiguration的类中定义了一个静态属性.我在Program.Main方法中设置了这个属性:

UIConfiguration.UIThread = Thread.CurrentThread;

在那一刻我可以肯定我有正确的线程,但是我不能设置像这样的静态属性

UIConfiguration.SynchronizationContext = SynchronizationContext.Current

因为尚未安装该类的WinForms实现.由于每个线程都有自己的SynchronizationContext,因此必须可以从给定的Thread对象中检索它,否则我完全错了?

这是不可能的.问题是SynchronizationContext和Thread实际上是两个完全独立的概念.

虽然Windows Forms和WPF都为主线程设置了SynchronizationContext,但大多数其他线程都没有.例如,ThreadPool中没有任何线程包含自己的SynchronizationContext(当然,除非您自己安装).

SynchronizationContext也可能与线程和线程完全无关.可以轻松设置同步上下文,以同步到外部服务或整个线程池等.

在您的情况下,我建议您在初始的主窗体的Loaded事件中设置UIConfiguration.SynchronizationContext.保证在该点开始上下文,并且在任何情况下消息泵启动之前将不可用.

翻译自:https://stackoverflow.com/questions/4107500/get-synchronizationcontext-from-a-given-thread

转载注明原文:c# – 从给定的线程获取SynchronizationContext