Необработанное исключение — это исключение, которое возникает, но не имеет соответствующего обработчика. Если исключение остаётся необработанным, программа аварийно завершает работу с ошибкой.
Известно, что для обработки ошибки следует использовать конструкцию try..catch..finally:
try
{
int value = int.Parse("Здесь мы получим ошибку");
}
catch
{
Console.WriteLine("Здесь мы её обработаем");
}
Console.WriteLine("Здесь код продолжит свою работу...");
// ...
//
Однако вне такой конструкции приложение будет аварийно завершено. Основной способ обработки иной ситуации является подписка на событие UnhandledException:
AppDomain.CurrentDomain.UnhandledException
Здесь определяется обработчик событий, который вызывается при возникновении необработанного исключения в домене приложения по умолчанию. Подписываемся на событие при старте приложения и проверяем:
AppDomain.CurrentDomain.UnhandledException += UnhandledException;
// Здесь мы получим ошибку
throw new Exception("Test");
Console.WriteLine("Пытаемся продолжить работу...");
// ...
//
void UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Console.WriteLine("Необработанная ошибка перехвачена");
}
Вывод будет примерно следующим:
Необработанная ошибка перехвачена
Unhandled exception. System.Exception: Test
at Program.<Main>$(String[] args)
Примечания:
Не злоупотребляйте перехватом всех исключений. Вместо этого старайтесь использовать блоки try..catch..finally в местах, где ожидаются исключения, чтобы контролировать ход выполнения программы. Перехват всех необработанных исключений следует использовать как крайнюю меру, а не для маскировки ошибок.
В обработчиках необработанных исключений обязательно логируйте информацию об исключении (сообщение, стек вызовов и т.п.), чтобы можно было найти и исправить ошибку.
После перехвата необработанного исключения приложение должно быть завершено, так как оно находится в некорректном состоянии.
#Полезно #Exception #TryCatch