Application.DispatcherUnhandledException イベント


アプリケーションによってスローされた例外が処理されないときに発生します。Occurs when an exception is thrown by an application but not handled.

 event System::Windows::Threading::DispatcherUnhandledExceptionEventHandler ^ DispatcherUnhandledException;
public event System.Windows.Threading.DispatcherUnhandledExceptionEventHandler DispatcherUnhandledException;
member this.DispatcherUnhandledException : System.Windows.Threading.DispatcherUnhandledExceptionEventHandler 
Public Custom Event DispatcherUnhandledException As DispatcherUnhandledExceptionEventHandler 

次の例では、DispatcherUnhandledException イベントを処理することによって、未処理の例外を処理する方法を示します。The following example shows how to process unhandled exceptions by handling the DispatcherUnhandledException event.

using System.Windows;
using System.Windows.Threading;

namespace SDKSample
    public partial class App : Application
        void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
            // Process unhandled exception

            // Prevent default unhandled exception processing
            e.Handled = true;
Imports System.Windows
Imports System.Windows.Threading

Namespace SDKSample
    Partial Public Class App
        Inherits Application
        Private Sub App_DispatcherUnhandledException(ByVal sender As Object, ByVal e As DispatcherUnhandledExceptionEventArgs)
            ' Process unhandled exception

            ' Prevent default unhandled exception processing
            e.Handled = True
        End Sub
    End Class
End Namespace


既定では、Windows Presentation Foundation はハンドルされない例外をキャッチし、(例外を報告できる) ダイアログボックスから例外のユーザーに通知し、アプリケーションを自動的にシャットダウンします。By default, Windows Presentation Foundation catches unhandled exceptions, notifies users of the exception from a dialog box (from which they can report the exception), and automatically shuts down an application.

ただし、アプリケーションで、一元化された場所からカスタムのハンドルされない例外処理を実行する必要がある場合は、DispatcherUnhandledExceptionを処理する必要があります。However, if an application needs to perform custom unhandled exception processing from a centralized location, you should handle DispatcherUnhandledException.

DispatcherUnhandledException は、メイン UI スレッドで実行されているコードによって処理されない例外ごとに Application によって発生します。DispatcherUnhandledException is raised by an Application for each exception that is unhandled by code running on the main UI thread.

バックグラウンド UI スレッド (独自の Dispatcherを持つスレッド) またはバックグラウンドワーカースレッド (Dispatcherを持たないスレッド) のいずれかで例外が処理されない場合、例外はメイン UI スレッドに転送されません。If an exception is not handled on either a background UI thread (a thread with its own Dispatcher) or a background worker thread (a thread without a Dispatcher), the exception is not forwarded to the main UI thread. その結果、DispatcherUnhandledException は発生しません。Consequently, DispatcherUnhandledException is not raised. このような状況では、次の操作を行うためのコードを記述する必要があります。In these circumstances, you will need to write code to do the following:

  1. バックグラウンドスレッドで例外を処理します。Handle exceptions on the background thread.

  2. これらの例外をメイン UI スレッドにディスパッチします。Dispatch those exceptions to the main UI thread.

  3. DispatcherUnhandledException を発生させることができるように、メイン UI スレッドでそれらを処理せずに再スローします。Rethrow them on the main UI thread without handling them to allow DispatcherUnhandledException to be raised.

詳細については、「スレッドモデルの概要」を参照してください。For more information, see the Threading Model overview.

DispatcherUnhandledException イベントハンドラーには、次のような、例外に関するコンテキスト情報を含む DispatcherUnhandledExceptionEventArgs 引数が渡されます。The DispatcherUnhandledException event handler is passed a DispatcherUnhandledExceptionEventArgs argument that contains contextual information regarding the exception, including:

この情報を使用すると、例外が復旧可能かどうかを判断できます。You can use this information to determine whether an exception is recoverable or not. 回復可能な例外は、たとえば、回復不能な例外が StackOverflowExceptionである可能性があるなど、FileNotFoundExceptionである可能性があります。A recoverable exception might be a FileNotFoundException, for example, while an unrecoverable exception might be a StackOverflowException, for example.

未処理の例外を DispatcherUnhandledExceptionから処理し、WPFWPF で処理を続行しない場合は、Handled プロパティを trueに設定する必要があります。When you process an unhandled exception from DispatcherUnhandledException, and you don't want WPFWPF to continue processing it, you need to set the Handled property to true.

Application が発生する他のイベントとは異なり、DispatcherUnhandledException には、対応する保護された仮想実装 (OnDispatcherUnhandledException) がありません。Unlike the other events that Application raises, DispatcherUnhandledException does not have a matching protected virtual implementation (OnDispatcherUnhandledException). そのため、Application から派生するクラスは、未処理の例外を処理するために、常に DispatcherUnhandledException でイベントハンドラーを登録する必要があります。Consequently, classes that derive from Application must always register an event handler with DispatcherUnhandledException to process unhandled exceptions.