Dispatcher and SynchronizationContext classes
Can somebody tell me when to use a Dispatcher
and when to use the SynchronizationContext
class?
For a while now I have been using th开发者_如何转开发e Dispatcher
to queue up tasks from a background thread, then I discovered the SynchronizationContext
.
AFAIK, when using WPF, the SynchronizationContext.Current
object is of type DispatcherSynchronizationContext
which is actually just a wrapper around the Dispatcher object and the Post
and Send
methods just delegate to Dispatcher.BeginInvoke
and Dispatcher.Invoke
.
So even if you decide to use SynchronizationContext
I think you end up calling dispatcher behind the scenes.
Besides I think it is a bit cumbersome to use SynchronizationContext as you have to pass a reference to the current context to all threads that need to call into your UI.
Use the Dispatcher when your code is tightly coupled to WPF.
Use the AsyncOperationManager when you need to queue something on the 'Context' thread. This works with Windows Forms, ASP .NET and WCF applications as well.
Avoid using the SynchronizationContext yourself. The AsyncOperationManager uses this mechnism internally.
精彩评论