このアプローチ:
- 予想される例外を適切な場所、つまり発生したのと同じコンテキストで処理できる場所でキャッチすることを強調していません。
- 別のスレッドで例外をキャッチしないため、マルチスレッド環境では機能しません。
- .NET Framework によってインターセプトされるため、多くの Windows フォーム例外をキャッチしません。
- プロセスが破損している場合を除き、すべての例外を飲み込みます。理解できない例外を飲み込んではいけないため、これは良いアプローチではありません。
より良いアプローチは、コンテキスト固有のメソッドで予期される例外をキャッチすることです。そこでは、例外を適切に処理するために利用できる知識が最も多くなります。予期しない例外をキャッチするために、Main メソッドは次のようになります。
// Event handler for handling all UI thread exceptions.
Application.ThreadException +=
new ThreadExceptionEventHandler(App_UiThreadException);
// Force all Windows Forms errors to go through our handler.
// NB In .NET 4, this doesn't apply when the process state is corrupted.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
// Event handler for handling all non-UI thread exceptions.
AppDomain.CurrentDomain.UnhandledException += new
UnhandledExceptionEventHandler(App_NonUiThreadException);
// Run the application.