AppDomain.CurrentDomain.UnhandledException
通常のtry-catchとは別にコンソールアプリケーションにコードを配置して、未処理の例外をキャッチするとします。つまり、例外によってアプリケーションが途中で強制終了されないことは確かですか? そうでない場合、どのタイプの例外が対象外ですか?
2 に答える
いいえ。これは、アプリケーションがクラッシュする前に何らかのコードを実行する機会があることを意味しますが、クラッシュを防ぐことはできません。ドキュメンテーション:
このイベントは、キャッチされていない例外を通知します。これにより、アプリケーションは、システムのデフォルト ハンドラがユーザーに例外を報告してアプリケーションを終了する前に、例外に関する情報をログに記録できます。
すべての例外をやみくもにキャッチしてアプリケーションを「クラッシュ防止」しようとするのは愚か者の用事です: 何が問題なのか本当にわからないのに、プログラムが実行を続けても問題ないことをどのように判断しますか?
理論的に言えば、イベントハンドラー内で行うことはすべて、考えられる方法で問題が発生する可能性があります (未処理の例外がスローされ、それが何であるかわからないため、それは何でもかまいません)。したがって、アプリケーションのクラッシュを防ぐことは不可能であるだけでなく、ハンドラー内で行うことにも十分注意する必要があります。
いいえ、いずれにしてもアプリケーションは終了しますが、アプリケーションが終了する前に例外を適切にログに記録する機会が得られます。ここを参照してください: http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx
これにより、アプリケーションは、システムのデフォルト ハンドラがユーザーに例外を報告してアプリケーションを終了する前に、例外に関する情報をログに記録できます。