2009-08-03 27 views
0

WinformsとWPFが混在するアプリケーションがあります。これは、常に期待されると正しく処理されていないことが発生私のアプリケーション内のどこかの例外をキャッチし例外がキャッチされない理由

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 
Application.ThreadException += Application_ThreadException; 

:Winformsので、私は次のように定義されたグローバルな例外ハンドラを持っています。 WPFのために

、私はキャプチャすることができるように見えるすべてがある:

wpfAppDomain = new System.Windows.Application(); 
wpfAppDomain.DispatcherUnhandledException += 
     wpfAppDomain_DispatcherUnhandledException; 

これは、常にグローバルな例外をキャッチしません、と私は、多くの場合、例外がどこかに飲み込まれていることを見つけて、私はなぜわかりません。

処理されていない例外が発生した場合に、その例外を捕捉できるグローバル例外ハンドラを作成するにはどうすればよいですか?

+0

これはVisual Studio内か実行可能ファイル内でテストしていますか? Visual Studioはいくつかの例外をキャッチし、アプリケーションの実行を中断しようとします。 – Zyphrax

+3

誰がその例外を投げたのですか?もしジョン・スケートがしたら、あなたはそれを捕まえることはできません;) – amazedsaint

+0

私は決して偉大で強力なジョン・スケートからの例外をキャッチしようとはしません。 – Russ

答えて

1

このコードが例外をキャッチし、例外が単にキャッチできているデザイン

  • によってそうではないだろういくつかの例があります。たとえば、実行時にスローされるStackOverflowException
  • 例外はあなたのコードで処理されていませんが、コアのWPFフレームワークで捕捉されます。

スローされた例外をすべてキャッチする方法はありません。これを行うには、常に動作するコードのセマンティクスに違反する可能性があります。

+0

私は、すべてがキャッチ可能ではないことを理解していますが、そうすべきですが、良い例はSQL例外です。 winformコードはそれらすべてをキャッチしますが、WPFはそれらを飲み込むようです。 – Russ

0

SetUnhandledExceptionModeを呼び出して試しましたか?このように:

// Force all exceptions through our handler. 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
0

DispatcherUnhandledExceptionのみディスパッチャによって呼び出されたコードから例外をキャッチ(名前が示すように)、WPFコードから呼び出されたときに発生した例外をキャッチすることになっています。

WinForms、BackgroundWorker、自分で起動したスレッドプールまたはスレッドは例外です。

でも、AppDomain.CurrentDomain.UnhandledExceptionを使用してそれらをキャッチできます。

関連する問題