Когда приложение деактивировано, каждый поток, кроме основного потока пользовательского интерфейса, генерирует исключение ThreadAbortException, как только оно становится активным.Похоже, что это «намеренно» как способ заставить приложения быстро прекратить то, что они делают.Потоки могут перехватить исключение ThreadAbortException и обернуть то, что они делают, но имейте в виду, что исключение ThreadAbortException будет автоматически возбуждено снова в конце блока catch.Любой код в блоке finally также будет выполнен.
Для вашей конкретной проблемы нет причин пытаться отменить BackgroundWorker, когда приложение деактивировано, поскольку возникнет исключение ThreadAbortException, которое эффективно остановит фонового работника.Если вы хотите что-то очистить, когда это происходит, вы ловите исключение ThreadAbortException в bw_DoWork, делаете то, что вам нужно сделать, и затем позволяете ему умереть.
Чтобы запустить его снова после активации, вам нужнонеобходимо перезапустить фоновый рабочий, как вы это делали при первом запуске приложения.