Подтвердить что ты не робот

BackgroundWorker RunWorkerCompleted Event

В моем приложении С# есть несколько фоновых работников. Иногда один фоновой работник увольняет другого. Когда первый работник фона завершается, а событие RunWorkerCompleted запущено, на каком потоке будет происходить это событие, пользовательский интерфейс или первый фоновой рабочий, из которого был вызван RunWorkerAsync? Я использую Microsoft Visual С# 2008 Express Edition. Любые мысли или предложения, которые у вас могут быть оценены. Спасибо.

4b9b3361

Ответ 1

Если BackgroundWorker был создан из потока пользовательского интерфейса, событие RunWorkerCompleted также будет поднято в потоке пользовательского интерфейса.

Если он был создан из фонового потока, событие будет поднято в фоновом потоке undefined (не обязательно тот же поток, если вы не используете пользовательский SynchronizationContext).

Интересно, что это не все, что хорошо документировано в MSDN. Лучшая ссылка, которую я смог найти, была здесь:

Предпочтительным способом реализации многопоточности в вашем приложении является использование компонента BackgroundWorker. Компонент BackgroundWorker использует управляемую событиями модель для многопоточности. В фоновом потоке выполняется DoWork обработчик событий, а поток, создающий ваши элементы управления, запускает ProgressChanged и RunWorkerCompleted обработчики событий. Вы можете вызвать свои элементы управления из ProgressChanged и RunWorkerCompleted обработчики событий.