как работает BackgroundWorker под капотом? - PullRequest
2 голосов
/ 22 декабря 2009

как он узнает, когда выполнять / не выполнять маршализацию вызова в пользовательском интерфейсе в обработчике события прогрессирующего изменения?

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

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

1 Ответ

4 голосов
/ 22 декабря 2009

Согласно Reflector, BackgroundWorker.RunWorkAsync , который вызывается из потока пользовательского интерфейса, использует AsyncOperationManager.CreateOperation.

Этот метод обращается к SynchronizationContext.Current (или создает новый, если его не существует).

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

...