Если вы используете .NET Framework 2.0 или более позднюю версию и существует необработанное исключение из рабочего потока, я считаю, что вам не повезло. В .NET 1.0 и 1.1 CLR просто проглотил исключение из потока, отличного от основного потока. Однако это было изменено в .NET 2.0, где необработанное исключение в потоке приводит к закрытию приложения.
Вы можете подписаться на AppDomain.CurrentDomain.UnhandledException, чтобы получать уведомления о возникновении такого рода необработанных исключений, но приложение, скорее всего, закрывается в этот момент, и у вас просто есть возможность сделать что-то перед неизбежным, например, войти в систему. исключение где-то и отображение удобного сообщения. UnhandledExceptionEventArgs имеет свойство только для чтения, называемое IsTerminating, которое можно проверить, чтобы увидеть, завершается ли приложение или нет. После завершения работы приложения обычно появляется диалоговое окно отчетов об ошибках Microsoft.
Хотя я бы не рекомендовал это, есть способ вернуться к тому, как ведут себя CLR 1.0 и 1.1, установив флаг совместимости приложений в файле конфигурации приложения.
Это не должно приводить к завершению работы приложения в случаях необработанных исключений и уменьшать вероятность получения этого сообщения об ошибке.
Я бы порекомендовал отлавливать только те исключения, которые вы ожидаете и способны обработать в своем коде, и позволить другим всплыть.