私は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);
}
あなたの 'Wait'メソッドはUIスレッドをブロックするので、あなたはいつも' ui 'スレッドがブロックされている間 "ハング"してしまうでしょう。 – pinkfloydx33
'Application.DoEvents()'を待ちループに追加すると、 Form2を表示することができます。 –
Application.DoEvents()は問題を解決しましたが、理由を理解できません。 Do1Sess()によってフォームが既に表示された後、最初に試した両方のメソッドが呼び出されているはずです。 – wtf