@ Gulzar Спасибо за эту информацию: ее необходимо создать и запустить из потока пользовательского интерфейса, чтобы переключение потоков происходило правильно.
Одна вещь, на которую нужно обратить внимание при использовании фонового работника, который я обнаружил, - это обработка исключений.
Если в асинхронном процессе возникнет исключение, оно не вызовет исключение в основном потоке, процесс завершится, и сработает событие BackgroundWorker RunWorkerCompleted с ошибкой, скрытой в RunWorkerCompletedEventArgs.Error.
Мне нравится тот факт, что BackgroundWorker обладает функциональностью, которая проста в реализации, но даже легче ошибочно реализовать тонким способом, таким как отмена.