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 런타임 이벤트 처리기와 같은 앱 코드를 호출하고 앱 코드가 예외를 throw하고 catch하지 않으면 예외가 Windows 런타임 다시 전파됩니다. 그런 다음 Windows 런타임 UnhandledException 이벤트를 실행하여 앱에 이 예외를 알립니다.

UnhandledException의 예외 처리는 디버깅과 런타임 예외 처리 및 가능한 복구에 모두 사용할 수 있는 많은 기술 중 하나일 뿐입니다. 디버깅 및 오류 처리에 사용할 수 있는 전체 기술 집합에 대한 자세한 내용은 C# 또는 Visual Basic의 예외 처리를 참조하세요.

이 이벤트는 앱 코드에서 예외를 catch할 가능성이 더 이상 없는 경우에만 발생합니다. 예를 들어 앱 이벤트 처리기가 콜백을 호출하는 Windows 런타임 API를 호출한다고 상상해 보십시오. 내부 앱 코드가 예외를 throw하고 catch하지 않으면 예외가 Windows 런타임 통해 앱 코드의 외부 계층으로 다시 전파되며 이를 catch할 수 있는 기회가 제공됩니다. UnhandledException 이벤트는 앱 코드가 정상적인 전파를 통해 예외를 catch할 기회가 더 이상 없는 경우에만 발생합니다.

예외가 throw되고 앱 코드에 의해 catch될 기회가 없을 수도 있습니다. 예를 들어 XAML 프레임워크가 레이아웃을 수행하고 예외가 throw되는 경우 이 예외는 앱 코드를 통해 전파되지 않습니다. 이 경우 UnhandledException 이벤트가 발생하며, 예외에 대한 모든 앱 코드 알림이 처음으로 표시됩니다.

일반적으로 UnhandledException 이벤트가 발생한 후 예외가 처리되지 않아 Windows 런타임 앱을 종료합니다. 앱 코드는 이를 제어합니다. UnhandledException 이벤트 처리기가 이벤트 인수의 Handled 속성을 true로 설정하면 대부분의 경우 앱이 종료되지 않습니다. 그러나 다음과 같은 몇 가지 이유로 정기적으로 수행하는 것은 권장되지 않습니다.

  • 일반적으로 UnhandledException 이벤트 처리기에는 예외 후 계속하는 것이 안전한지 여부를 알 수 있는 충분한 정보가 없습니다. 애플리케이션 코드 또는 Windows 런타임 일부가 일관되지 않은 상태일 수 있으며, 앱이 코드를 계속 실행하면 후속 오류가 발생할 수 있습니다.
  • Windows 런타임 특정 작업 중에 발생한 예외를 복구할 수 없는 것으로 간주합니다. 이러한 예외에 따라 Windows 런타임 자체가 일관되지 않은 상태이기 때문입니다. 이러한 예외의 경우 UnhandledException 이벤트 처리기가 Handledtrue로 설정하더라도 앱은 계속 종료됩니다.
  • 탐색 중에 발생하는 오류로 인해 콘텐츠로 로드된 내용이 없고 앱이 여전히 실행 중임을 사용자에게 나타내지 않는 상태가 발생할 수 있습니다.
  • 이러한 사항에 대한 자세한 내용은 C# 또는 Visual Basic의 예외 처리를 참조하세요.

주목할 만한 제한 사항은 UnhandledException 이벤트 인수에 앱 코드에서 전파된 원래 예외만큼 세부 정보가 포함되지 않는다는 것입니다. 가능하면 앱에서 특정 예외를 특정 처리해야 하는 경우 더 자세한 내용을 사용할 수 있으므로 전파될 때 예외를 catch하는 것이 항상 좋습니다. UnhandledException 이벤트 인수는 Exception 속성을 통해 예외 개체를 노출합니다. 그러나 이 예외 개체의 형식, 메시지 및 스택 추적은 발생한 원래 예외와 일치하도록 보장되지 않습니다. 이벤트 인수는 Message 속성을 노출합니다. 대부분의 경우 원래 발생한 예외의 메시지가 포함됩니다.

XAML에서 UnhandledException에 대한 처리기를 연결할 수 없습니다(App.xaml의 Application 요소). 생성자 또는 활성화 논리의 코드에서 Application 개체에서 UnhandledException에 대한 처리기를 연결해야 합니다.

Windows 8.1 앱의 경우 비동기 메서드 호출의 예외가 UnhandledException 이벤트로 전파할 수 있습니다. 여기에는 사용자 고유의 비동기 메서드 구현(활성화 처리기 등)이 포함됩니다.

적용 대상

추가 정보