2007-11-12 11月12日の日記
■[C#] アプリケーションで未ハンドルの例外を補足する。(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
リンク元
- 113 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GFRC,GFRC:2006-51,GFRC:ja&q=enum+文字列+取得
- 104 http://slashcolon.com/wordpress/2009/02/15/ハンドルされていない例外の捕捉でハマル/
- 66 http://www.google.co.jp/search?hl=ja&q=Application.ThreadException&btnG=Google+検索&lr=
- 50 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=Sandcastle+builder&num=50
- 48 http://gsf.zero1.googlepages.com/csharp
- 37 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=n45&q=BindingSource+カスタム+バインド&btnG=検索&lr=lang_ja
- 37 http://www.google.co.jp/url?sa=t&source=web&cd=5&ved=0CEYQFjAE&url=http://d.hatena.ne.jp/gsf_zero1/20071112/p1&rct=j&q=C# アプリケーション 例外&ei=15JdTvOMGMbRiAKD4JSz
- 32 http://slashcolon.com/wordpress/category/ジャンル別/ソフトウェア-ジャンル別/windows-ソフトウェア-?%
- 26 http://sites.google.com/site/gsfzero1/
- 20 http://www.google.co.jp/search?hl=ja&q=Thread.GetDomain().UnhandledException&btnG=Google+検索&lr=
Development Tools-Visual C#