Диспетчер и классы SynchronizationContext

Может кто-то говорить мне, когда использовать a Dispatcher и когда использовать SynchronizationContext класс?

Некоторое время теперь я использовал Dispatcher для стояния в очереди задач от фонового потока затем я обнаружил SynchronizationContext.

12
задан stakx supports GoFundMonica 31 January 2011 в 20:04
поделиться

2 ответа

  1. Используйте диспетчер, если ваш код тесно связан с WPF.

  2. Используйте AsyncOperationManager, когда вам нужно поставить что-то в очередь на поток 'Context'. Это работает с приложениями Windows Forms, ASP .NET и WCF.

  3. Избегайте самостоятельного использования SynchronizationContext. AsyncOperationManager использует этот механизм внутри.

4
ответ дан 2 December 2019 в 18:18
поделиться

AFAIK, при использовании WPF, SynchronizationContext. Current объект имеет тип DispatcherSynchronizationContext который на самом деле является просто оберткой вокруг объекта Dispatcher и методы Post и Send просто делегируются на Dispatcher.BeginInvoke и Dispatcher.Invoke.

Так что даже если вы решите использовать SynchronizationContext, я думаю, вы в конечном итоге будете вызывать диспетчер за кулисами.

Кроме того, я думаю, что использование SynchronizationContext немного громоздко, так как вам придется передавать ссылку на текущий контекст всем потокам, которым нужно обратиться к вашему UI.

16
ответ дан 2 December 2019 в 18:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: