Если вы хотите уведомить пользователя и зарегистрировать исключение, попробуйте добавить Application.ThreadException
Однако обратите внимание (из документации MSDN): Это событие позволяет приложению Windows Forms обрабатывать необработанные исключения, возникающие в потоках Windows Forms. Присоедините ваши обработчики событий к событию ThreadException, чтобы обработать эти исключения, которые оставят ваше приложение в неизвестном состоянии. Где возможно, исключения должны обрабатываться блоком структурированной обработки исключений.
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
// Handle
}
Вы также можете добавить обработчик событий к событию AppDomain.UnhandledException . Важно отметить, что вы не сможете восстановить здесь. Тем не менее, вы как минимум сможете зарегистрировать исключение для дальнейшей отладки и уведомить пользователя. Следует соблюдать осторожность (снова из документации MSDN):
Это событие предоставляет уведомление о необработанных исключениях. Это позволяет приложению регистрировать информацию об исключении до того, как системный обработчик по умолчанию сообщит об исключении пользователю и завершит работу приложения. Если имеется достаточная информация о состоянии приложения, могут быть предприняты другие действия, такие как сохранение данных программы для последующего восстановления. Рекомендуется соблюдать осторожность, поскольку данные программы могут быть повреждены, когда исключения не обрабатываются.
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
// Notify the user and log the exception
}