2017-02-21 4 views
0

私は2つのフォームを表示するフォームプログラムを持っています。基本的にform1はform2を隠し、チェッカーボードを作成して内容を再構築し、form2を表示します。私が一歩一歩進むと、すべてがうまく表示されます。私はhide-rebuild-showのいくつかのシーケンスをform2の各ディスプレイの間に短いポーズで実行して、期待通りに動作していることを確認できます。各ショーの後にmsgboxを置くと、正しく描かれたform2が見えます。私がショーの後に2秒の休止(2秒間何もしないループ)を入れたら、私はフォームの輪郭を見るが、チェッカーボードがあるはずのオープンスペースを見る。私はそれがある種のタイミング問題だと思っていますが、それを修正する方法はわかりません。短い休止をする正しい方法は何ですか?C#フォーム表示タイミング

private void Do1Bot() 
    { 
     SetStart(); 
     for (int i = 1; i <= numsess; i++) 
     { 
      NextSess(); 
      Do1Sess(); 
      //MessageBox.Show("After do1 sess"); // Checkerboard appears in the middle of the form this way. 
      //Wait(2); // This way I get the form borders but a blank space in place of a checkerboard. 
     } 
    } 

    private void Wait(int secs) 
    { 
     DateTime Tend = DateTime.Now.AddSeconds(secs); 
     do { }    
     while (DateTime.Now < Tend); 

    } 
+3

あなたの 'Wait'メソッドはUIスレッドをブロックするので、あなたはいつも' ui 'スレッドがブロックされている間 "ハング"してしまうでしょう。 – pinkfloydx33

+0

'Application.DoEvents()'を待ちループに追加すると、 Form2を表示することができます。 –

+0

Application.DoEvents()は問題を解決しましたが、理由を理解できません。 Do1Sess()によってフォームが既に表示された後、最初に試した両方のメソッドが呼び出されているはずです。 – wtf

答えて

0

Waitループ(Sam Axのおかげで)にApplication.DoEvents()を追加することで問題は解決しました。

+0

https://xkcd.com/292/ –

関連する問題