Поделиться через


Application.UnhandledException Событие

Определение

Возникает, когда исключение может обрабатываться кодом приложения, пересылаемым из ошибки среда выполнения Windows машинного уровня. Приложения могут помечать событие как обработанное в данных события.

public:
 virtual event UnhandledExceptionEventHandler ^ UnhandledException;
// Register
event_token UnhandledException(UnhandledExceptionEventHandler const& handler) const;

// Revoke with event_token
void UnhandledException(event_token const* cookie) const;

// Revoke with event_revoker
Application::UnhandledException_revoker UnhandledException(auto_revoke_t, UnhandledExceptionEventHandler const& handler) const;
public event UnhandledExceptionEventHandler UnhandledException;
function onUnhandledException(eventArgs) { /* Your code */ }
application.addEventListener("unhandledexception", onUnhandledException);
application.removeEventListener("unhandledexception", onUnhandledException);
- or -
application.onunhandledexception = onUnhandledException;
Public Custom Event UnhandledException As UnhandledExceptionEventHandler 

Тип события

Комментарии

Событие UnhandledException используется для уведомления приложения об исключениях, возникших платформой XAML или среда выполнения Windows в целом, которые не были обработаны кодом приложения.

Например, если среда выполнения Windows вызывает код приложения, как обработчик событий, а код приложения создает исключение и не перехватывает его, исключение будет распространяться обратно на среда выполнения Windows. Затем среда выполнения Windows вызовет UnhandledException событие, чтобы уведомить приложение об этом исключении.

Обработка исключений UnhandledException в — это лишь один из многих методов, которые можно использовать как для отладки, так и для обработки исключений во время выполнения и возможного восстановления. Дополнительные сведения о полном наборе методов, которые можно использовать для отладки и обработки ошибок, см. в статье Обработка исключений (руководство по программированию на C#).

Обратите внимание, что это событие срабатывает только в том случае, если больше нет возможности перехвата исключения в коде приложения. Например, представьте, что обработчик событий приложения вызывает API среда выполнения Windows, который, в свою очередь, вызывает обратный вызов. Если внутренний код приложения создает исключение и не перехватывает его, исключение будет распространяться через среда выполнения Windows обратно на внешний уровень кода приложения, который получает возможность перехватить его. Событие UnhandledException возникает только в том случае, если код приложения больше не может перехватывать исключение путем обычного распространения.

Кроме того, можно создать исключение и никогда не получить никаких шансов быть перехватываемым кодом приложения. Например, если платформа XAML выполняет макет и создается исключение, это исключение не будет распространяться через код приложения. В этом случае UnhandledException срабатывает событие , и это будет первый раз, когда код приложения получает уведомление об исключении.

Обычно после запуска UnhandledException события среда выполнения Windows завершает работу приложения, так как исключение было необработанным. Код приложения имеет некоторый контроль над этим: если UnhandledException обработчик событий задает свойству Handled аргументов trueсобытия значение , то в большинстве случаев приложение не будет завершено. Однако делать это регулярно не рекомендуется по нескольким причинам:

  • Как правило, UnhandledException обработчик событий не имеет достаточно сведений, чтобы узнать, является ли продолжение после исключения безопасным. Части кода приложения или среда выполнения Windows могут находиться в несогласованном состоянии, что может привести к последующим сбоям, если приложение продолжает выполнять свой код.
  • Среда выполнения Windows считает исключения, возникшие во время определенных операций, невосстановимыми, так как сама среда выполнения Windows будет находиться в несогласованном состоянии после этих исключений. Для таких исключений, даже если UnhandledException обработчик событий задает значение Handledtrue, приложение по-прежнему будет завершено.
  • Ошибки, возникающие во время навигации, могут привести к тому, что ничего не загружается как содержимое и не указывает пользователю на то, что приложение по-прежнему работает.
  • Дополнительные сведения об этих аспектах см. в статье Обработка исключений (руководство по программированию на C#).

Важное ограничение заключается в UnhandledException том, что аргументы события не содержат столько сведений, сколько исходное исключение, распространяемое из кода приложения. По возможности, если приложению требуется определенная обработка определенного исключения, всегда лучше перехватывать исключение по мере его распространения, так как в этом случае будут доступны дополнительные сведения. Аргументы UnhandledException события предоставляют объект исключения через свойство Exception . Однако тип, сообщение и трассировка стека этого объекта исключения не гарантируются в соответствии с типом исходного исключения, которое было создано. Аргументы события предоставляют свойство Message . В большинстве случаев это будет содержать сообщение о первоначально созданном исключении.

Невозможно подключить обработчики для UnhandledException в XAML (в элементе Application в App.xaml). Необходимо присоединить обработчики для UnhandledException к объекту Application в коде либо в конструкторе, либо в логике активации.

Применяется к

См. также раздел