Hatena::ブログ(Diary)

いろいろ備忘録日記 このページをアンテナに追加 RSSフィード Twitter

2007-11-12 11月12日の日記

[] アプリケーションで未ハンドルの例外を補足する。(Application.ThreadException, AppDomain.UnhandledException)

.NETにて、ハンドルされていない例外を補足するには2つの方法があります。

  • Windowsフォーム内にて発生した未ハンドル例外を補足する。
    • Application.ThreadException
  • フォーム以外で発生した未ハンドル例外を補足する。
    • AppDomain.UnhandledException

2番目の方のUnhandledExceptionについては、以下のようにして設定します。

Thread.GetDomain().UnhandledException += xxxxxx

以下、サンプルです。

// vim:set ts=4 sw=4 et ws is nowrap ft=cs:
using System;
using System.Threading;
using System.Windows.Forms;

namespace Gsf.Samples.Tmp{

    public class ApplicationThreadExceptionSample : IExecutor{

        class InnerForm : Form{

            public InnerForm(){
                Load += delegate(object sender, EventArgs e){
                    throw new InvalidOperationException("未ハンドルの例外発生!!");
                };
            }
        }

        public void Execute(){

            /////////////////////////////////////////////////////////////
            //
            // フォーム内で発生した、未ハンドルの例外を補足する。
            //
            Application.ThreadException += delegate(object sender, ThreadExceptionEventArgs e){
                MessageBox.Show(e.Exception.Message);
                Application.Exit();
            };

            Application.Run(new InnerForm());

            /////////////////////////////////////////////////////////////
            //
            // フォームとは関係ない、スレッドでの未ハンドル例外を補足する。
            //
            Thread.GetDomain().UnhandledException += delegate(object sender, UnhandledExceptionEventArgs e){
                Console.WriteLine("未ハンドルの例外をキャッチ:{0}", (e.ExceptionObject as Exception).Message);
                Environment.Exit(-1);
            };

            Thread t = new Thread(delegate(){
                throw new InvalidOperationException("未ハンドルの例外発生2!!");
            });

            t.Start();
            t.Join();
        }
    }
}

上記のサンプルを実行すると、フォーム内で発生した例外に関してはメッセージボックスが表示され

その後のスレッドで発生した例外に関しては、コンソールにメッセージが表示されます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/gsf_zero1/20071112/p1