好的,我在这里有点困惑。SynchronzationContext
浏览与DispatcherSynchronizationContext
. 以下是 MSDN 杂志关于此类的摘录:
DispatcherSynchronizationContext (WindowsBase.dll: System.Windows.Threading) WPF 和 Silverlight 应用程序使用 DispatcherSynchronizationContext,它将委托以“正常”优先级排列到 UI 线程的 Dispatcher。当线程通过调用 Dispatcher.Run开始其 Dispatcher 循环时,此 SynchronizationContext 被安装为当前上下文。DispatcherSynchronizationContext 的上下文是单个 UI 线程。
排队到 DispatcherSynchronizationContext 的所有委托由特定的 UI 线程按照它们排队的顺序一次执行一个。当前实现为每个顶级窗口创建一个 DispatcherSynchronizationContext,即使它们都共享相同的底层 Dispatcher。
(从这里:https ://msdn.microsoft.com/magazine/gg598924.aspx )
让我感到困惑的是,我用粗体/斜体表示的两个部分似乎相互矛盾。第一个似乎DispatcherSynchronizationContext
是每个线程创建一个并设置为线程的当前同步上下文。但是,第二个摘录说每个窗口DispatcherSynchronizationContext
都创建一个,即使它们都共享相同的调度程序/UI 线程。
我错过了什么/不理解什么?
如果它真的是每个窗口一个,而不仅仅是每个线程,你如何获得DispatcherSynchronizationContext
特定窗口的?