お知らせ
2021年5月20日
C# Formアプリの例外を一括管理

そこそこ規模が大きい業務アプリケーションで、追加改修やら新規機能追加を繰り返していくうちにどこかで例外キャッチが漏れてしまい、不具合の原因が迷宮入りしているものを見かけることがあります。
例外まわりの設計をきちんと行い、共通化等を行っていればいいのですが、なかなか理想的にはいきません。
.Netアプリケーションで例外キャッチを忘れ、行き場を失うとスタックとレースが出力されたダイアログが出てきます。
業務アプリケーションでは、これでは格好がつかないので、キャッチが漏れても必ず処理できる方法を紹介します。
・ThreadExceptionEventHandler
以下のように使います。
static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.Run(new XXXForm());
}
//ThreadExceptionイベントハンドラ
private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) {
// ここに例外が発生した場合必ず行う処理を記載(例:ダイアログ、ログ出力等)
}
}
これでフォーム内で例外が発生し、キャッチを忘れても「Application_ThreadException」が引っかけてくれます。
ただ、Application_ThreadException内でエラーが発生したら意味が無いので、シンプルな処理にしましょう。