我正在构建一个总共有5种形式的程序。 1个MDIContainer和4个MDIChildren。
我目前每个MDIChild都有一个thread.sleep(1000)
。执行操作时,我仍然需要其他3个MDIChild才能正常工作和交互。但是,现在调用thread.sleep(1000)
时,整个程序会休眠1秒钟,我必须等待睡眠完成才能与任何其他形式进行交互。
有没有办法让单一表格睡觉?如果是这样,请如何和例子。
答案 0 :(得分:1)
你应该基本上永远不要在UI线程中睡觉......永远......正是你的问题所证明的原因。
您只想在1秒内执行一些代码。这样做有两种有效的方法:
1)您可以使用Timer
。通过在Forms
命名空间中使用计时器,您可以确保在UI线程中触发Tick
事件,并且您无需执行任何特殊操作来与UI元素进行交互。
private void Form1_Load(object sender, EventArgs e)
{
label1.Text = "Loading . . .";
var timer = new System.Windows.Forms.Timer();
timer.Interval = 1000;
timer.Tick += (s, args) =>
{
label1.Text = "Done!";
};
timer.Start();
}
正如您所看到的,这确实需要位更多的代码,但它仍然有效。
2)如果你有.NET 4.5和C#5.0,你可以使用await
的任务来使这个非常光滑,简单:
private async void Form1_Load(object sender, EventArgs e)
{
label1.Text = "Loading . . .";
await Task.Delay(1000); //wait 1 second, but don't block the UI thread.
label1.Text = "Done!";
}