Application.DispatcherUnhandledException イベント

定義

アプリケーションによってスローされた例外が処理されないときに発生します。

public:
 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 

イベントの種類

DispatcherUnhandledExceptionEventHandler

次の例は、イベントを処理して未処理の例外を処理する方法を DispatcherUnhandledException 示しています。

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は未処理の例外をキャッチし、ダイアログ ボックス (例外を報告できる場所) から例外をユーザーに通知し、アプリケーションを自動的にシャットダウンします。

ただし、アプリケーションが一元化された場所からカスタムのハンドルされない例外処理を実行する必要がある場合は、処理 DispatcherUnhandledExceptionする必要があります。

DispatcherUnhandledException は、 Application メイン UI スレッドで実行されているコードによって処理されない例外ごとに発生します。

例外がバックグラウンド UI スレッド (独自 Dispatcherのスレッド) またはバックグラウンド ワーカー スレッド (スレッドなしの Dispatcherスレッド) で処理されない場合、例外はメイン UI スレッドに転送されません。 その結果、 DispatcherUnhandledException 発生しません。 このような状況では、次の操作を行うコードを記述する必要があります。

  1. バックグラウンド スレッドで例外を処理します。

  2. これらの例外をメイン UI スレッドにディスパッチします。

  3. それらを処理せずにメイン UI スレッドで再スローして、発生を許可 DispatcherUnhandledException します。

詳細については、「スレッド モデルの概要」 を参照 してください。

イベント ハンドラーには DispatcherUnhandledException 、次のような例外に関するコンテキスト情報を含む引数が渡されます DispatcherUnhandledExceptionEventArgs

この情報を使用して、例外が回復可能かどうかを判断できます。 回復可能な例外は FileNotFoundException、たとえば、回復不可能な例外 StackOverflowExceptionは、たとえば、次のようになります。

からハンドルされない例外DispatcherUnhandledExceptionを処理し、WPF で処理を続行しない場合は、プロパティtrueHandled .

発生する Application 他のイベントとは異なり、 DispatcherUnhandledException 一致する保護された仮想実装 (OnDispatcherUnhandledException) はありません。 そのため、派生元 Application のクラスは、ハンドルされない例外を処理するために常にイベント ハンドラーを DispatcherUnhandledException 登録する必要があります。

適用対象