エラー発生時に表示させるダイアログをユーザーフレンドリーにする
うまく例外をキャッチできない場合に.NET Frameworkの不格好な標準のエラーダイアログが表示されるのが嫌だったのでこれをうまいこと例外をキャッチしてダイアログをユーザーフレンドリーにカスタマイズする。
(あとついでに表示させたダイアログを自動的に閉じるようにもする)
サンプルコード
以下のサイトを大いに参考にさせてもらいましたm(_ _)m
つ 適切に処理されなかった例外をキャッチするには?:.NET TIPS - @IT
using System;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
namespace TestApp
{
public class Test
{
[STAThread]
static void Main()
{
// ThreadExceptionイベント・ハンドラの登録
Application.ThreadException += new
ThreadExceptionEventHandler(ApplicationThreadException);
// ほかの処理
}
// 未処理例外をキャッチするイベント・ハンドラ
public static void ApplicationThreadException(object sender, ThreadExceptionEventArgs e)
{
// 第二引数にエラーメッセージ
ShowErrorMessage(e.Exception, "ApplicationThreadException");
}
// ユーザー・フレンドリなダイアログを表示するメソッド
public static void ShowErrorMessage(Exception ex, string extraMessage)
{
// ダイアログを自動的に閉じるようにしたいので以下の処理を追記
var w = new Form() { Size = new Size(0, 0) };
// ここでは約5秒後に閉じるように設定
Task.Delay(TimeSpan.FromSeconds(5))
.ContinueWith((t) => w.Close(), TaskScheduler.FromCurrentSynchronizationContext());
// ダイアログに表示させるメッセージを記述
MessageBox.Show(w
, "エラーが発生しました。約5秒後にアプリケーションの再起動を行います。\n\nしばらくお待ちください。\n\n\n"
, "Error : " + extraMessage);
// エラーダイアログが閉じた後に実行する処理(アプリの終了処理を書いたり)
Application.Exit();
}
}
}