У меня есть приложение MFC, скомпилированное с / clr, и я пытаюсь реализовать конечный обработчик для других неотслеживаемых управляемых исключений. Для собственных исключений работает переопределение CWinApp::ProcessWndProcException
.
Два события, предложенные в статье CodeProject Джеффа , Application.ThreadException
и AppDomain.CurrentDomain.UnhandledException
, не возникают.
Кто-нибудь может предложить способ предоставления окончательного обработчика управляемых исключений для смешанного исполняемого файла?
Обновление:
Похоже, что эти обработчики исключений срабатывают только после Application.Run
или аналогичного (есть разновидность рабочего потока, имя не запоминается.) Если вы хотите по-настоящему глобально перехватить управляемое исключение, вам нужно установить SEH фильтр. Вы не получите System.Exception
, и если вам нужен стек вызовов, вам придется катить своего собственного ходунка.
В вопросе на форуме MSDN по этой теме было предложено переопределить достаточно низкоуровневую точку основного потока MFC в try ... catch (Exception^)
. Например, CWinApp::Run
. Это может быть хорошим решением, но я не смотрел на какие-либо последствия для стабильности или стабильности. У вас будет возможность войти в стек вызовов до того, как вы внесете залог, и вы сможете избежать поведения неустановленных исключений в окнах по умолчанию.