質問: null; this.review(); MessageBox.Show("読み込みが完了しました。", AppName, MessageBoxButtons.OK, MessageBoxIcon.Information); } ``` よろしくお願いいたします。
回答: async/await 構文を使うのが良いかなと思います。 `SplashScreen` の描画完了を待っているわけではなく、描画と同時進行で読み込み処理を行います。読み込み処理中にUIを操作することもできます。不都合な場合は `Enabled` を `false` にするとよいかもしれません。 ``` async void LoadButton_Click(object sender, EventArgs e) { try { await Reload(); } catch (Exception ex) { // ... Application.Exit(); } } async Task Reload() { var ss = new SplashScreen(); ss.Show(this); var succeded = await Task.Run(() => HeavyTask()); ss.Close(); if (!succeded) { // ... } // ... } ``` もしくは `Application.DoEvents` で描画の完了を強制できるようです。こちらは読み込み処理中にアプリケーションがフリーズしたようになります。あまりに長いとOSから応答なしと判断されるかもしれません。 ``` async void LoadButton_Click(object sender, EventArgs e) { Reload(); } async void Reload() { var ss = new SplashScreen(); ss.Show(this); Application.DoEvents(); var succeded = HeavyTask(); ss.Close(); if (!succeded) { // ... } // ... } ```