有人可以告诉我何时使用Dispatcher
以及何时使用SynchronizationContext
课程?
有一段时间我一直在使用Dispatcher
从后台线程中排队任务,然后我发现了SynchronizationContext
。
答案 0 :(得分:16)
AFAIK,当使用WPF时,SynchronizationContext.Current
对象的类型为DispatcherSynchronizationContext
,它实际上只是Dispatcher对象的包装器,而Post
和Send
方法只是委托到Dispatcher.BeginInvoke
和Dispatcher.Invoke
。
所以,即使您决定使用SynchronizationContext
,我认为您最终会在幕后调用调度程序。
此外我认为使用SynchronizationContext有点麻烦,因为您必须将对当前上下文的引用传递给需要调用UI的所有线程。
答案 1 :(得分:4)
当您的代码与WPF紧密耦合时,请使用Dispatcher。
当您需要在“Context”线程上排队时,请使用AsyncOperationManager。这适用于Windows窗体,ASP .NET和WCF应用程序。
避免自己使用SynchronizationContext。 AsyncOperationManager在内部使用此机制。