Для начала могу сказать, что фоновый рабочий будет в другом потоке, выделенном из ThreadPool
. Тем не менее, все еще возможно заблокировать ваш пользовательский интерфейс, потому что когда вы вызываете события ProgressChanged
или RunWorkerCompleted
, они перенаправляются обратно в поток пользовательского интерфейса. Только событие DoWork
работает в другом потоке ThreadPool
.
Если вы не в потоке пользовательского интерфейса, вы не сможете получить доступ к элементам пользовательского интерфейса, например к кнопке 2, без небольшой дополнительной работы. Чтобы получить доступ к элементам пользовательского интерфейса из других потоков, необходимо использовать Control.Invoke
для перенаправления обратного вызова в поток пользовательского интерфейса.