アプリケーションの読み込み中にスプラッシュ スクリーンを表示したいです。システム トレイ コントロールが関連付けられたフォームがあります。このフォームの読み込み中にスプラッシュ スクリーンを表示したいのですが、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();
}