2011-07-05 6 views
0

私はライブエンジンからデータを取得し、それを処理するアプリケーションを作成しています。このデータは5秒ごとに更新されます。Splashscreenを終了するには?

今私は、データフェッチの最初のサイクルの進捗バーを示すスプラッシュスクリーンを持っています。データが初めて取得されると、アプリケーションはフェッチされたデータを示すメインフォームを開きます。ここから、メインフォームは5秒ごとにループ内のデータをフェッチします。

私は、メインフォームを開くためのコードをBackgroundWorkerのProgressChangedイベントに入れました。

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     progressBar1.Value = Math.Min(e.ProgressPercentage, 100); 
     if (progressBar1.Value == 100) 
     {     
      SplashScr.ActiveForm.Hide(); 
      frmMainForm frmMain= new frmMainForm(); 
      frmMain.WindowState = FormWindowState.Maximized; 
      frmMain.Show(); 

     } 
    } 

メインフォームがロードされているか、この実装である場合にスプラッシュスクリーンを閉じる方法はありますか?

+0

これを隠す代わりに意味しますか? –

+0

@Edwinを隠すのではなく、私は閉じたいが、それはアプリケーションを閉じる。 – Arcturus

+0

Program.csファイルを参照したい – MadBender

答えて

3

私はあなたのProgram.Mainでは、これらの線に沿って何かがあると仮定するつもりです:そう、それはあなたがスプラッシュフォームを閉じるとアプリケーションが終了される理由である場合

Application.Run(new SplashForm()); 

を。

Application.Run(new MainForm()); 

次に、メインフォームからスプラッシュフォームを表示し、その最後から処理します。

hh

+0

このソリューションに感謝しますが、別の問題が発生します。 Backgroundworkerを使用してスプラッシュ画面のコードで1サイクル目のデータを取得しているのがわかります。このデータは、5秒ごとに更なる更新を要求するメインフォームに入力されます。スプラッシュスクリーンの背景作業者が終了するまで、メインフォームを待機させるにはどうすればよいですか? – Arcturus

+0

メインフォームからすべてを(バックグラウンドワーカーを蹴飛ばすように)しようとします。ディスプレイにはスプラッシュのみを使用してください。最初のサイクルが完了すると、スプラッシュが閉じることができます。 –

0

2つの可能性があります。

私はあなたのスプラッシュ画面がアプリケーションによって作成された最初の「メインフォーム」であると仮定しています。これにより、デフォルトでアプリケーションを終了するときにアプリケーションが終了します。

スプラッシュ画面を任意の方法で開いたり閉じたりできるようにするか、GUIのメインフォームを開いたままにするか、閉じる方法のデフォルト操作を変更する必要があります。 'close on on close'ですが、これはあなたの例の最小化と同じ効果があります。

0

私の意見では、むしろメインフォーム内にスプラッシュ画面が含まれています。スプラッシュ画面は、メインフォームのinit/loadメソッド の間に表示され、データの所望の%がロードされると、閉じることができます。したがって、バックグラウンドワーカーはメインフォーム自体で作成する必要があります。

したがって、バックグラウンドワーカーの進行状況変更メソッドは、スプラッシュ画面を閉じるだけです。メインスレッドにハンドルが含まれているのでこれは問題ありません

関連する問題