2012-04-28 2 views

ответ

2

Потому что основной поток может отменить исключение и/или дождаться окончания потока, а затем продолжить обработку.

Когда вызов к методу Прервать, чтобы уничтожить нить, общий язык среда бросает ThreadAbortException. ThreadAbortException - особое исключение, которое можно поймать, но оно должно быть снова поднято в конце блока catch. Когда возбуждено это исключение, среда выполнения выполняет все блоки finally перед завершением потока. Поскольку поток может выполнить неограниченное вычисление в блоках finally или вызвать Thread.ResetAbort, чтобы отменить прерывание, нет гарантии, что нить никогда не закончится. Если вы хотите подождать, пока закончится прерванная нить, вы можете вызвать метод Thread.Join . Join - это блокирующий вызов, который не возвращается до , поток фактически прекращает выполнение.

См. ThreadAbortException Class.

1

Это связано с тем, что ThreadAbortException должен завершать только поток, на который он был отправлен. Но могут быть и другие потоки, все еще запущенные, поэтому процесс не будет завершен, пока не исчезнут все потоки переднего плана.

Смежные вопросы