После еще нескольких поисков в Google я нашел это очень интересное объяснение, которое было дано той же самой проблеме, как описано Джеффом Этвудом в его блоге .
Привет всем,
Извините за путаницу. Это поведение на самом деле дизайн, хотя дизайн может быть немного запутанным время от времени.
Первое, что нужно понять, это то, что событие UnhandledException не является обработчиком необработанного исключения. Регистрация на событие, вопреки тому, что написано в документации :-(, не приводит к обработке необработанных исключений. (С тех пор они не будут обрабатываться, но я остановлюсь на циклическом рассуждении уже ...) Событие UnhandledException просто уведомляет вас о том, что исключение прошло необработанным , на случай, если вы хотите попытаться сохранить состояние до того, как ваш поток или приложение умрут. FWIW, я подал ошибку, чтобы получить документы неподвижная.
Просто, чтобы усложнить ситуацию, в v1.0 и 1.1 необработанное исключение не всегда означало, что ваше приложение умрет. Если необработанное исключение возникло в чем-либо кроме основного потока или потока, который начал свою жизнь в неуправляемом коде, CLR съел исключение и позволил вашему приложению продолжать работу. Как правило, это было зло, потому что часто случалось так, что потоки ThreadPool молча отмирали один за другим, пока ваше приложение фактически не выполняло никакой работы. Выяснить причину такого рода неудач было практически невозможно. Возможно, поэтому Джефф думал, что это сработало раньше ... он просто всегда видел сбои в неосновных потоках.
В версии 2.0 необработанное исключение в любом потоке приведет к удалению приложения. Мы обнаружили, что отладку сбоев намного проще, чем отладку зависаний или проблему молчаливого прекращения работы, описанную выше.
Кстати, на моей машине 1.1 пример из MSDN имеет ожидаемый результат; просто вторая строка не появляется, пока вы не подключите отладчик (или нет). В v2 мы перевернули вещи так, что событие UnhandledException срабатывает до того, как подключается отладчик, что, по-видимому, и ожидается большинством людей.
Джонатан Кельо
CLR исключения PM
Джонатан Кельо, 18 февраля 2005 г., 22:02
Тем не менее, мне все еще интересно, как поток пользовательского интерфейса выполняет прием, позволяющий вам иметь универсальный обработчик для всех исключений потока пользовательского интерфейса.