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