.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(); } } }
上記のサンプルを実行すると、フォーム内で発生した例外に関してはメッセージボックスが表示され
その後のスレッドで発生した例外に関しては、コンソールにメッセージが表示されます。
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ