Dispatcher和SynchronizationContext类

时间:2010-06-18 13:01:01

标签: wpf dispatcher synchronizationcontext

有人可以告诉我何时使用Dispatcher以及何时使用SynchronizationContext课程?

有一段时间我一直在使用Dispatcher从后台线程中排队任务,然后我发现了SynchronizationContext

2 个答案:

答案 0 :(得分:16)

AFAIK,当使用WPF时,SynchronizationContext.Current对象的类型为DispatcherSynchronizationContext,它实际上只是Dispatcher对象的包装器,而PostSend方法只是委托到Dispatcher.BeginInvokeDispatcher.Invoke

所以,即使您决定使用SynchronizationContext,我认为您最终会在幕后调用调度程序。

此外我认为使用SynchronizationContext有点麻烦,因为您必须将对当前上下文的引用传递给需要调用UI的所有线程。

答案 1 :(得分:4)

  1. 当您的代码与WPF紧密耦合时,请使用Dispatcher。

  2. 当您需要在“Context”线程上排队时,请使用AsyncOperationManager。这适用于Windows窗体,ASP .NET和WCF应用程序。

  3. 避免自己使用SynchronizationContext。 AsyncOperationManager在内部使用此机制。