Мое приложение C# имеет несколько второстепенных рабочих. Иногда один второстепенный рабочий будет исчерпывать другого. Когда первый второстепенный рабочий завершается и RunWorkerCompleted
событие запущено, на котором поток будет тот огонь события, UI или первый второстепенный рабочий от который RunWorkerAsync
был назван? Я использую Microsoft Visual C# 2008 Express Edition. Любые мысли или предложения, которые Вы можете иметь, ценились бы.Спасибо.
Если BackgroundWorker
был создан из потока пользовательского интерфейса, то событие RunWorkerCompleted
также будет вызвано в потоке пользовательского интерфейса.
Если он был создан из фонового потока, то событие будет вызвано в неопределенном фоновом потоке (не обязательно в том же потоке, если только вы не используете пользовательский SynchronizationContext
).
Интересно, что это, похоже, не так уж хорошо документировано в MSDN. Лучшая ссылка, которую я смог найти, была здесь:
Предпочтительным способом реализации многопоточности в вашем приложении является использование компонента BackgroundWorker. Компонент BackgroundWorker использует событийно-управляемую модель для многопоточности. Фоновый поток запускает ваш обработчик события DoWork, а поток, создающий ваши элементы управления, запускает ваши обработчики событий ProgressChanged и RunWorkerCompleted. Вы можете вызывать свои элементы управления из обработчиков событий ProgressChanged и RunWorkerCompleted.