次の方法で共有


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 

イベントの種類

次の例は、 イベントを処理して未処理の例外を処理する方法を 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は、メイン UI スレッドで実行されているコードによって処理されない例外ごとに によってApplication発生します。

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

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

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

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

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

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

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

から DispatcherUnhandledException未処理の例外を処理し、WPF で処理を続行したくない場合は、 プロパティを Handled に設定する true必要があります。

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

適用対象