Form初期処理

Form初期処理

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Windows.Forms;

namespace MyApp.FormApplication
{
	static class Program
	{
		#region アプリケーションのメイン エントリ ポイント
		/// <summary>
		/// アプリケーションのメイン エントリ ポイントです。
		/// </summary>
		[STAThread]
		static void Main()
		{
            // Mutexの取得
            bool created;
            using (Mutex mutex = new Mutex(true, "MyFormAppBase", out created))
            {
                if (created)
                {
                    //Logger.GetInstance().Write(Application.ProductName, AppLog.Level.INFO, "アプリケーション起動。");

                    //ThreadExceptionイベント・ハンドラを登録
                    Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);

                    //UnhandledExceptionイベントハンドラを登録
                    System.AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

					//App
					Application.EnableVisualStyles();
					Application.SetCompatibleTextRenderingDefault(false);
					Application.Run(new FormApp());
				}
				else
				{
					//Logger.GetInstance().Write(Application.ProductName, AppLog.Level.WARN, "二重起動できません。");

					//msg
					MessageBox.Show("二重起動できません。",
						Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
				}
			}
		}
		
		#endregion

		#region エラーメッセージ表示
		/// <summary>
		/// エラーメッセージ表示
		/// </summary>
		/// <param name="ex">例外オブジェクト</param>
		/// <param name="extraMessage">メッセージ</param>
		public static void ShowErrorMessage(Exception ex, string extraMessage)
		{
			//Logger.GetInstance().Write(Application.ProductName, AppLog.Level.FATAL, ex.Message + ex.StackTrace);

			//msg
			MessageBox.Show(extraMessage + " \n――――――――――――――――――――――――――――――\n\n" +
				"エラーが発生しました。開発元にお知らせください\n\n" +
				"【エラー内容】\n" + ex.Message + "\n\n" +
				"【スタックトレース】\n" + ex.StackTrace,
				Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);

			//アプリケーションを終了する
			Environment.Exit(0);
		}
		#endregion

		#region CurrentDomain_UnhandledExceptionイベント
		/// <summary>
		/// CurrentDomain_UnhandledException
		/// </summary>
		/// <param name="sender">送信元オブジェクト</param>
		/// <param name="e">イベントオブジェクト</param>
		static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
		{
			Exception ex = e.ExceptionObject as Exception;

			if (ex != null)
			{
				ShowErrorMessage(ex, "Application_UnhandledExceptionによる例外通知です。");
			}
		}
		#endregion

		#region Application_ThreadExceptionイベント
		/// <summary>
		/// Application_ThreadException
		/// </summary>
		/// <param name="sender">送信元オブジェクト</param>
		/// <param name="e">イベントオブジェクト</param>
		static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
		{
			ShowErrorMessage(e.Exception, "Application_ThreadExceptionによる例外通知です。");
		}
		#endregion

	}
}