Управляемые исключения реализуются с использованием обычных механизмов структурированной обработки исключений Windows. Код исключения - 0xe0434f4d. Windows ищет обработчик исключений, который готов обработать исключение. Если в коде нет активного блока try в стеке или блок захвата не хочет перехватить управляемое исключение, то последним вздохом в управляемом коде является событие AppDomain.UnhandledException.
Если это не реализовано, то обработка исключений переключается на неуправляемую обработку, фильтр исключений, установленный с помощью SetUnhandledExceptionFilter, получает выстрел. В противном случае в Windows всегда есть обработчик по умолчанию. Обычно вызывает WER, программу отчетов об ошибках Windows. Это предлагает пользователю диалоговое окно для отправки сведений об исключении в Microsoft. Не ожидайте ничего от этого.
К тому времени, когда оно вышло за пределы AppDomain.UnhandledException, вся информация об управляемом исключении теряется. Нет трассировки стека, нет сообщения об исключении. Только код исключения, который вы уже знаете, и адрес исключения, для которого вы не будете использовать, потому что код динамически генерируется компилятором JIT.
Обязательно перехватите исключение на последнем этапе вздоха, напишите обработчик события для AppDomain.UnhandledException. Зарегистрируйте значение e.ExcdeptionObject.ToString () и закройте программу с помощью Environment.Exit (). Также остерегайтесь события Application.ThreadException в коде Windows Forms и события Dispatcher.UnhandledException в коде WPF. Они являются задним ходом для исключений, которые возникают при обработке событий в потоке пользовательского интерфейса.