3
3

More than 3 years have passed since last update.

【C#】.NET Frameworkの標準エラーダイアログをカスタマイズして表示させる

Last updated at Posted at 2021-08-12

エラー発生時に表示させるダイアログをユーザーフレンドリーにする

うまく例外をキャッチできない場合に.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();
        }
    }
}

参考URL

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3