UnhandledException 이벤트

Application.UnhandledException Event

네이티브 수준에서 전달되는 응용 프로그램 코드에서 예외가 나타나면 발생합니다. 응용 프로그램은 항목이 이벤트 데이터에서 처리된 것으로 표시할 수 있습니다.

구문


public event UnhandledExceptionEventHandler UnhandledException

이벤트 정보

대리자 UnhandledExceptionEventHandler

설명

UnhandledException 이벤트는 XAML 프레임워크에서 발생했으나 응용 프로그램 코드에서 처리되지 않은 예외에 대해 응용 프로그램에 알리는 데 사용됩니다.

예를 들어 XAML 프레임워크가 이벤트 처리기와 같은 응용 프로그램 코드를 호출하는 경우 응용 프로그램 코드는 예외를 throw하고 이를 catch하지 않으며, 예외는 다시 XAML 프레임워크 코드로 전파됩니다. XAML 프레임워크는 UnhandledException 이벤트를 발생시켜 이 예외를 응용 프로그램에 알립니다.

응용 프로그램 코드에서 예외를 더 이상 catch할 수 없을 경우에만 이 이벤트가 발생합니다. 예를 들어 응용 프로그램 이벤트 처리기가 XAML 프레임워크 API를 호출하면 이 API가 응용 프로그램 콜백을 호출하는 경우를 가정합니다. 내부 응용 프로그램 코드가 예외를 throw하고 catch하지 않을 경우 예외를 catch할 기회가 지정된 응용 프로그램 코드의 외부 레이어로 XAML 프레임워크를 통해 예외를 전파합니다. UnhandledException 이벤트는 응용 프로그램 코드에서 일반 전파를 통해 예외를 catch할 수 없는 경우에만 발생합니다.

예외가 발생하고 응용 프로그램 코드에서 catch할 수 있는 기회가 없을 수도 있습니다. 예를 들어 XAML 프레임워크가 레이아웃을 수행하고 예외가 발생될 경우 이 예외는 응용 프로그램 코드로 전파되지 않습니다. 이 경우 UnhandledException 이벤트가 발생하므로 예외에 대해 응용 프로그램 코드를 알리는 첫 번째 경우입니다.

예외가 처리되지 않았으므로 일반적으로 UnhandledException 이벤트가 발생한 후에 XAML 프레임워크에서 응용 프로그램을 종료합니다. 응용 프로그램에서 이 상황을 제어하기도 합니다. UnhandledException 이벤트 처리기에서 이벤트 인수의 Handled 속성을 true로 설정하면 대부분의 경우 응용 프로그램이 종료되지 않습니다. 하지만 이는 여러 가지 이유로 권장되지 않습니다.

  • 일반적으로 UnhandledException 이벤트 처리기는 예외가 발생한 후 계속하는 것이 안전한지 여부를 판단하기에 충분한 정보가 없습니다. 응용 프로그램 코드 또는 XAML 프레임워크의 일부는 일관성 없는 상태가 될 수 있으므로 응용 프로그램이 계속 실행될 경우 후속 실패가 발생할 수 있습니다.
  • XAML 프레임워크는 이러한 예외가 발생한 후 런타임 코드 자체가 일관성 없는 상태가 되기 때문에 특정 작업이 수행되는 동안 발생한 예외를 복구할 수 없는 것으로 간주합니다. 이러한 예외의 경우 UnhandledException 이벤트 처리기가 Handledtrue로 설정하더라도 응용 프로그램은 종료합니다.

UnhandledException 이벤트의 몇 가지 제한을 알고 있어야 합니다. 이 이벤트는 XAML 프레임워크에 의해 발생하는 예외에만 사용됩니다. 다른 Windows 런타임 구성 요소 또는 XAML 프레임워크에 연결되지 않은 응용 프로그램 부분에서 발생하는 예외로 인해 이 이벤트가 발생하지 않습니다. 예를 들어 다른 Windows 구성 요소가 응용 프로그램 코드로 호출되고 예외가 throw되어 catch되지 않으면 UnhandledException 이벤트가 발생하지 않습니다. 응용 프로그램에서 작업자 스레드를 만든 후 작업자 스레드에서 예외를 발생시킬 경우 UnhandledException 이벤트가 발생하지 않습니다.

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

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

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

요구 사항

지원되는 최소 클라이언트

Windows 8

지원되는 최소 서버

Windows Server 2012

Namespace

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Metadata

Windows.winmd

참고 항목

Application

 

 

표시:
© 2017 Microsoft