using System; using System.Windows.Forms; using System.Threading; namespace WindowsApplication1 { public class Program { [STAThread] static void Main() { // ThreadExceptionイベント・ハンドラを登録する Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException); // UnhandledExceptionイベント・ハンドラを登録する Thread.GetDomain().UnhandledException += new UnhandledExceptionEventHandler(Application_UnhandledException); // メイン・スレッド以外の例外はUnhandledExceptionでハンドルする //string buffer = "1"; char error = buffer[2]; // ここで実行されるメイン・アプリケーション・スレッドの例外は // Application_ThreadExceptionでハンドルできる Application.Run(new Form1()); } // 未処理例外をキャッチするイベント・ハンドラ(Windowsアプリケーション用) public static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) { ShowErrorMessage(e.Exception, "Application_ThreadExceptionによる例外通知です。"); } // 未処理例外をキャッチするイベント・ハンドラ(主にコンソール・アプリケーション用) public static void Application_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Exception ex = e.ExceptionObject as Exception; if (ex != null) { ShowErrorMessage(ex, "Application_UnhandledExceptionによる例外通知です。"); } } // ユーザー・フレンドリなダイアログを表示するメソッド public static void ShowErrorMessage(Exception ex, string extraMessage) { MessageBox.Show(extraMessage + " \n――――――――\n\n" + "エラーが発生しました。開発元にお知らせください\n\n" + "【エラー内容】\n" + ex.Message + "\n\n" + "【スタックトレース】\n" + ex.StackTrace); } } }