2017-02-21 5 views
0

У меня есть программа форм, которая отображает две формы. По существу form1 скрывает form2, перестраивает его содержимое, создавая шахматную доску, а затем показывает form2. Если я сделаю шаг за шагом, все будет хорошо. Я хочу запустить несколько последовательностей hide-rebuild-show с небольшой паузой между каждым отображением формы2, чтобы я мог проверить, работает ли она как ожидалось. Если я помещаю 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. – pinkfloydx33

+0

Добавление' Application.DoEvents() 'в цикл ожидания вызовет сообщение цикл, позволяя отображать Form2. –

+0

Application.DoEvents() решила проблему, но я не понимаю, почему. Поскольку оба метода, которые я попытался изначально, должны были вызываться после того, как форма была показана Do1Sess(). – wtf

ответ

0

Приложение Application.DoEvents() к циклу ожидания (спасибо Sam Axe) решило проблему.

+0

https://xkcd.com/292/ –

Смежные вопросы