У меня есть программа форм, которая отображает две формы. По существу 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);
}
Ваш метод 'Wait 'блокирует поток пользовательского интерфейса, поэтому вы всегда будете видеть его« зависанием »на время блокировки нити ui. – pinkfloydx33
Добавление' Application.DoEvents() 'в цикл ожидания вызовет сообщение цикл, позволяя отображать Form2. –
Application.DoEvents() решила проблему, но я не понимаю, почему. Поскольку оба метода, которые я попытался изначально, должны были вызываться после того, как форма была показана Do1Sess(). – wtf