Событие BackgroundWorker RunWorkerCompleted

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

26
задан abatishchev 20 October 2011 в 09:22
поделиться

1 ответ

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

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

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

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

60
ответ дан 28 November 2019 в 06:42
поделиться
Другие вопросы по тегам:

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