C# でマルチスレッド スプラッシュ スクリーンを作成する方法 質問する

C# でマルチスレッド スプラッシュ スクリーンを作成する方法 質問する

アプリケーションの読み込み中にスプラッシュ スクリーンを表示したいです。システム トレイ コントロールが関連付けられたフォームがあります。このフォームの読み込み中にスプラッシュ スクリーンを表示したいのですが、Web サービス API にアクセスしてドロップダウンを設定するため、少し時間がかかります。また、読み込む前に依存関係の基本的なテストも行いたいです (つまり、Web サービスが使用可能で、構成ファイルが読み取り可能であること)。起動の各フェーズが進むにつれて、スプラッシュ スクリーンを進行状況で更新したいです。

スレッドについてたくさん読んできましたが、これをどこから制御すればよいのか (メソッドmain()?) がわからなくなっています。またApplication.Run()、どのように動作するのかもよくわかりません。ここからスレッドを作成するのでしょうか? さて、システム トレイ コントロールのあるフォームが「生きている」フォームである場合、スプラッシュはそこから来るのでしょうか? いずれにしても、フォームが完了するまでは読み込まれないのではないでしょうか?

私はコードの配布を求めているのではなく、これを完全に理解できるアルゴリズムやアプローチを求めています :)

ベストアンサー1

秘訣は、スプラッシュ スクリーンの表示を担当する別のスレッドを作成することです。
アプリを実行すると、.net はメイン スレッドを作成し、指定された (メイン) フォームを読み込みます。ハードワークを隠すために、読み込みが完了するまでメイン フォームを非表示にすることができます。

Form1 がメイン フォームで、SplashForm がトップ レベルの、境界のない素敵なスプラッシュ フォームであると仮定します。

private void Form1_Load(object sender, EventArgs e)
{
    Hide();
    bool done = false;
    ThreadPool.QueueUserWorkItem((x) =>
    {
        using (var splashForm = new SplashForm())
        {
            splashForm.Show();
            while (!done)
                Application.DoEvents();
            splashForm.Close();
        }
    });

    Thread.Sleep(3000); // Emulate hardwork
    done = true;
    Show();
}

おすすめ記事