【C#】WinForm アプリケーション作成時のお約束

 

VS2019で、WinForm アプリケーションを作成するときに、お決まり事のように行う作業がある。

まずあ、ネットワーク機能が搭載される場合には”ほぼ”必須となっているTLS1.2対応。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

どこに記述するのがいいのかは、アプリケーションの性質にはよるが、呪文なので、Program.cs でよいと考えている。

そして、アプリケーションの性質上。一つだけしかたちあげたくない場合には、Mutexを設定して、アプリケーションが起動状態にあるのか確認する方法がある。タスクを調べたり、Widowハンドルを調べる方法もあるが、個人的にはMutexを使う方法をよく使う。ハンドル操作は、最近の高性能なパソコンだけを相手にしているのならいいが、低スペックなパソコンやアプリケーションを大量に起動している場合には、起動時に一呼吸タイミングができてしまう。

            //Mutex名を決める(必ずアプリケーション固有の文字列に変更すること!)
            string mutexName = "必ずアプリケーション固有の文字列に変更すること!";
            //Mutexオブジェクトを作成する
            System.Threading.Mutex mutex = new System.Threading.Mutex(false, mutexName);

            bool bHandle = false;
            try
            {
                try
                {
                    //ミューテックスの所有権を要求する
                    bHandle = mutex.WaitOne(0, false);
                }
                catch (System.Threading.AbandonedMutexException)                 //.NET Framework 2.0以降の場合
                {
                    //別のアプリケーションがミューテックスを解放しないで終了した時
                    bHandle = true;
                }
                //ミューテックスを得られたか調べる
                if (bHandle == false)
                {
                    //得られなかった場合は、すでに起動していると判断して終了
                    MessageBox.Show("得られなかった場合は、すでに起動していると判断して終了");
                    return;
                }
                else
                {

                    //はじめからMainメソッドにあったコードを実行
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    // 起動パラメータのチェックはハンドル操作を行う場合起動するフォームに情報を渡す。
                    //Application.Run(new frmMain(bHandle));
                    Application.Run(new frmMain());
                }
            }
            finally
            {
                if (bHandle)
                {
                    //ミューテックスを解放する
                    mutex.ReleaseMutex();
                }
                mutex.Close();
            }

これもおまじないです。

開発に関してや、時事ネタ。F1関連の戯言を呟いています。
小説アカウントでは、宣伝をメインに積読本や購入予定の書籍を呟いています。