2012-03-23 3 views
0

ShowDialog()と表示されるフォームが1つあります。そのフォームが閉じられた後、進捗バーのフォームが表示される前に、前のフォームが完全に削除されないという点を除いて、進捗バー付きの新しいフォームが表示されます。これをどうすれば処理できますか?新しいフォームに間に合わない以前のフォーム

using(FormA formA= new FormA) 
{ 
    if(formA.ShowDialog()==DialogResult.OK) 
    { 

    } 
} 

FormB formB = new FormB; 
formB.Show(); 
...{ 
    formB.progressBar.PerformStep(); 
...} 
formB.Close();     
+0

あなたのプログレスバーのためのBackgroundWorkerを使用していない場合ので、我々は – Jon

+5

を見ることができ、推測では、あなたの処理でUIをブロックしていることになると、あなたが見ている「ゴースト」ができないことであるいくつかのコードを追加してください。 guiはフォームを適切に更新します。 – LarsTech

答えて

1

あなたはUIスレッドをブロックすることができる、これを試してみてください。

using(FormA formA= new FormA) 
{ 
    if(formA.ShowDialog()==DialogResult.OK) 
    { 

    } 
} 

Application.DoEvents(); //make sure the ui refreshes 

FormB formB = new FormB; 
formB.Show(); 
...{ 
    formB.progressBar.PerformStep(); 
...} 
formB.Close(); 
0

FormAのフォームクローズイベントで行われますFormBとコード以下のコードでは、必ずFormAを行う前に閉じられていますFormBが表示されます。

using(FormA formA= new FormA) 
{ 
    formA.FormClosed += delegate(...) { 
     FormB formB = new FormB; 
     formB.Show(); 
     ...{ 
      formB.progressBar.PerformStep(); 
     ...} 
     formB.Close(); 
    }; 
    if(formA.ShowDialog()==DialogResult.OK) 
    { 

    } 
}