Процесс ветки вашего фонового работника не должен иметь цикл. И это не должно быть отменено, чтобы закончить. Это просто заканчивается, когда ... процесс завершается!
Когда он закончится, будет вызван RunWorkerCompleted
.
Я вижу главную проблему в вашем вызове: вы управляете своим GUI из фонового потока. Это нет-нет! Все манипуляции с элементом GUI должны быть сделаны из потока, который создал элемент. В вашем случае используйте ReportProgress()
для делегирования информации о состоянии обработчику ProgressChanged
, который будет выполнять ее в потоке переднего плана.
Кроме того, как писал Rewinder, вы можете отменить работника с FormClosing()
. Но если вы никогда не отслеживаете CancellationPending
из вашего рабочего процесса, это бессмысленно.