/// <summary>Thread関数でスプラッシュ画面を表示する。</summary> private static void ShowSplashByThread() { // 副スレッド(スプラッシュ画面を生成したスレッド) // スプラッシュ画面を // ・作成 Splash._splashForm = new Splash(); // ・閉じるイベントハンドラを仕掛 Splash._nextForm.Activated += new EventHandler(Splash.Login_Activated); // ・表示 Application.Run(Splash._splashForm); }
/// <summary> /// ログイン画面がアクティブになった時、スプラッシュ画面を閉じる /// </summary> private static void Login_Activated(object sender, EventArgs e) { // 主スレッド(スプラッシュ画面を生成していないスレッド) // なので、スプラッシュ画面を閉じるメソッドをInvoke if (Splash._splashForm != null && !Splash._splashForm.IsDisposed) { Splash._splashForm.Invoke(new MethodInvoker(Splash.CloseSplash)); } // nullクリア Splash._splashForm = null; Splash._nextForm = null; Splash._thread = null; }
static void Main() { // configの初期化 GetConfigParameter.InitConfiguration("appsettings.json"); // 既定の処理 Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // UnhandledExceptionイベント・ハンドラを登録する Thread.GetDomain().UnhandledException += new UnhandledExceptionEventHandler(Application_UnhandledException); // ThreadExceptionイベント・ハンドラを登録する Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException); // スプラッシュ画面の表示 Splash.ShowSplash(new Login()); // <スピンロック> // SleepすればCPUオーバヘッドはほとんど無いが // Sleep時間を長く、ループ回数を短くする // ことでよりCPUオーバヘッドを軽減できる。 for (int i = 0; i < 30; i++) { if (Splash.SpinLock) { break; // 直ちに抜ける } Thread.Sleep(100); } // ThreadExceptionイベント・ハンドラを登録する Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException); // 次の画面(ログイン画面)の表示 Application.Run(Splash.NextForm); if (Program.FlagEnd) { return; // ログインしないで終わった場合 } // ThreadExceptionイベント・ハンドラを登録する Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException); // 初期化画面の表示 Application.Run(new ByReturn()); if (Program.FlagEnd) { return; // 初期化しないで終わった場合 } // ThreadExceptionイベント・ハンドラを登録する Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException); // 業務画面の表示(業務の開始) Application.Run(new Form0()); }