2017-02-21 11 views
0

두 가지 양식을 표시하는 양식 프로그램이 있습니다. 본질적으로 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

대기 루프 (Sam Ax 덕택에)에 Application.DoEvents()를 추가하면 문제가 해결되었습니다.

+0

https://xkcd.com/292/ –