起動に時間のかかるソフトウェアの場合、ユーザーに起動していることを知らせる為に表示する比較的小さなサイズのウィンドウをスプラッシュウィンドウと呼びます。
このウィンドウを表示することで、ユーザーはソフトウェアが起動中であることを知ることができます(体感速度もあがります)
スプラッシュウィンドウは、ソフトウェアのメインウィンドウが表示されるタイミングで閉じます(中には、表示されたままというものもあります)
さて、これを実現するために、僕は今まで Program Class の Main()メソッドでスプラッシュウィンドウを開いていました。
しかし、Application.Run(); でメインフォームを開くまでは不用意なことはできません。
何故なら、Application.Run() によってメッセージポンプが起動されるため、この前に何らかの処理を行おうとすると、メッセージポンプが正常に働かない危険性があるらしいのです。
(この辺りは、僕も詳しくないので、詳細は MSDN 等でご自身で確認して下さい)
そんな訳なので、僕は必ず Run で呼び出される MainForm の中で何とか対処するように心がけようと思った訳です。
前置きが長くなりましたが、
とっても単純
なスプラッシュウィンドウです。
public partial class MainWindow : Form
{
private SplashForm splashForm;
public MainWindow() {
this.splashForm = new SplashForm();
this.splashForm.Show();
this.InitializeComponent();
this.Shown += new System.EventHandler(this.MainWindow_Shown);
}
private void MainWindow_Shown(object sender, EventArgs e) {
this.splashForm.Close();
this.splashForm.Dispose();
}
}
要するに、コンストラクタの先頭で、何より先にスプラッシュウィンドウを開くことと、Shown イベントを登録して、Shown イベントがスプラッシュウィンドウを閉じると言う訳です。
Shown イベントは、このインスタンスのフォームが表示された直後に一度だけ呼び出されるので、スプラッシュウィンドウが閉じるのはメインウィンドウが表示された後になります。
ちなみに、「this.Shown += new System.EventHandler(this.MainWindow_Shown);」の部分は、デザイナからイベントを登録した場合、this.InitializeComponent(); の中で登録されるので不要です。(というか、こちらの方が良いです)