c#表单显示定时
我有一个表格程序,可以显示两个表格。从本质上讲,form1隐藏form2,通过创建棋盘来重建其内容,然后显示form2。如果我一步一步地通过它,一切都会显示良好。我想运行几个隐藏重建显示序列,在form2的每个显示之间有一个短暂的暂停,以便验证它是否按预期工作。如果我在每次演出后放一个msgbox,我会看到正确绘制了form2。如果我在表演结束后暂停2秒(循环2秒不做任何事情),我会看到表格的轮廓,但棋盘应该放在一个空白处。我认为这是一个时间问题,但不知道如何解决。做短暂停顿的正确方法是什么c#表单显示定时,c#,forms,timing,display,C#,Forms,Timing,Display,我有一个表格程序,可以显示两个表格。从本质上讲,form1隐藏form2,通过创建棋盘来重建其内容,然后显示form2。如果我一步一步地通过它,一切都会显示良好。我想运行几个隐藏重建显示序列,在form2的每个显示之间有一个短暂的暂停,以便验证它是否按预期工作。如果我在每次演出后放一个msgbox,我会看到正确绘制了form2。如果我在表演结束后暂停2秒(循环2秒不做任何事情),我会看到表格的轮廓,但棋盘应该放在一个空白处。我认为这是一个时间问题,但不知道如何解决。做短暂停顿的正确方法是什么
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);
}
private void Do1Bot()
{
SetStart();
for(int i=1;i将Application.DoEvents()添加到等待循环(多亏了Sam Axe)解决了这个问题。您的wait
方法会阻止UI线程,因此在UI线程被阻止期间,您总是会看到它“挂起”添加Application.DoEvents()
等待循环将导致消息泵循环,从而允许显示Form2。Application.DoEvents()解决了这个问题,但我不明白为什么。因为我最初尝试的两个方法都应该在Do1ss()显示表单后调用。永远不要在循环中忙着等待。这完全是浪费CPU周期,而且会耗尽电池电量。如果你想有一个延迟,那么就使用计时器。顺便说一句,既然计时器已经在工具箱中了,你就没有理由不使用它。我想要的是理解。如果窗体2显示在do1ss中,为什么不呢无论我使用何种延迟都可见?当然,我知道do nothing循环不是生产代码,它是一种快速而肮脏的方式,试图在更新后查看表单。它显示了表单的大纲,但没有显示内容。你是说form.show事件没有在下一条指令之前完成吗?我阅读了关于DoEv的内容我和ents都知道这对同时发生的事件有什么帮助,但我认为这些事件是连续的。请让我澄清我的无知。