27

.NETのAppDomain.UnhandledExceptionApplication.DispatcherUnhandledExceptionの違いは何ですか?

未処理の例外が発生したときに発生するイベントが必要です。私はこれら2つに出くわしましたが、それらが互いにどのように違うのかわかりません。また、解雇されない場合はありますか?

4

3 に答える 3

17

Application.DispatcherUnhandledExceptionWPF アプリケーションのメイン UI スレッドでスローされた例外を処理します。 AppDomain.UnhandledException任意のスレッドでスローされ、決してキャッチされない例外を処理します。これには、手動で作成したスレッドまたはコンソール アプリケーションのメイン スレッドが含まれます。WPF は UI スレッドで例外をキャッチしているため、AppDomain.UnhandledException.

AppDomain.UnhandledExceptionまた、未処理の例外は通常、ランタイムを終了させるため、が発生した後、プログラムはすぐに終了することに注意してください。対照的に、Application.DispatcherUnhandledExceptionは例外をキャッチし、プログラムを続行させます。

于 2010-07-09T12:05:37.620 に答える
9

DispatcherUnhandledException は、UI スレッドによってのみ発生し、イベントの実行中に例外が発生した場合にのみ発生します。この種の例外を特別に処理するという伝統が少しあります。Windows フォームにも Application.ThreadException (名前が不十分で、スレッドとは関係ありません) があります。

その理由は、UI イベント ハンドラーが常にプログラムの状態を劇的に変化させるとは限らないため、例外を処理してプログラムを存続させるわずかな可能性があるためです。これには、希望的観測の大きな助けが必要です。Windows フォームはこれを極端に行い、[続行] ボタンを持つ ThreadExceptionDialog を表示して、ユーザーが例外を無視できるようにします。WPF はそれを行いません。そのようなダイアログを自分で作成する必要があります。それがイベントがある理由です。

DispatcherUnhandledException のデフォルト アクションは、例外をキャッチしないことです。したがって、無視しても問題ありません。次に AppDomain.UnhandledException が発生します。

于 2010-07-09T12:21:54.793 に答える
2

http://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx

言います:

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

http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

言います:

「このイベントは、任意のアプリケーション ドメインで処理できます。ただし、例外が発生したアプリケーション ドメインでイベントが発生するとは限りません。」

したがって、DispatcherUnhandledException は UI スレッド例外用であり、AppDomain.UnhandledException はその他すべてのものです。

それが役立つことを願っています!

于 2010-07-09T12:07:41.263 に答える