2009-12-22 2 views
2

как он узнает, когда/не нужно маршалировать вызов в поток пользовательского интерфейса в своем обработчике событий с измененным действием?Как работает BackgroundWorker под капотом?

Я знаю, что SynchronizationContext.Current может выполнить трюк, но это свойство задается только в главном потоке пользовательского интерфейса, что если фоновый работник создается на другом фоновом потоке?

Может кто-нибудь объяснить?

ответ

4

В соответствии с рефлектором BackgroundWorker.RunWorkAsync, который вызывается из UI-потока, использует AsyncOperationManager.CreateOperation.

Этот метод позволяет получить доступ к SynchronizationContext.Current (или создает новое, если оно не существует).

Так что SynchronizationContext сохраняется при запуске BGW.

+0

создает новое, если оно не существует, это ключевой момент. Благодарю. – Benny