Может кто-то говорить мне, когда использовать a Dispatcher
и когда использовать SynchronizationContext
класс?
Некоторое время теперь я использовал Dispatcher
для стояния в очереди задач от фонового потока затем я обнаружил SynchronizationContext
.
Используйте диспетчер, если ваш код тесно связан с WPF.
Используйте AsyncOperationManager, когда вам нужно поставить что-то в очередь на поток 'Context'. Это работает с приложениями Windows Forms, ASP .NET и WCF.
Избегайте самостоятельного использования SynchronizationContext. AsyncOperationManager использует этот механизм внутри.
AFAIK, при использовании WPF, SynchronizationContext. Current
объект имеет тип DispatcherSynchronizationContext
который на самом деле является просто оберткой вокруг объекта Dispatcher и методы Post
и Send
просто делегируются на Dispatcher.BeginInvoke
и Dispatcher.Invoke
.
Так что даже если вы решите использовать SynchronizationContext
, я думаю, вы в конечном итоге будете вызывать диспетчер за кулисами.
Кроме того, я думаю, что использование SynchronizationContext немного громоздко, так как вам придется передавать ссылку на текущий контекст всем потокам, которым нужно обратиться к вашему UI.