我正在构建一个总共有 5 个表单的程序。1 个 MDIContainer 和 4 个 MDIChildren。
我目前thread.sleep(1000)
每个 MDIChild 都有一个。执行操作时,我仍然需要其他 3 个 MDIChilds 才能工作和交互。但是,现在当thread.sleep(1000)
调用 时,整个程序会休眠 1 秒,我必须等待休眠完成,然后才能与任何其他形式进行交互。
有没有办法让单一表格睡眠?如果是这样,请如何和示例。
你基本上不应该在 UI 线程中睡觉......永远......因为你的问题所表明的原因。
您只想在 1 秒内执行一些代码。有两种有效的方法可以做到这一点:
1)您可以使用Timer
. 通过在Forms
命名空间中使用计时器,您可以确保它Tick
在 UI 线程中触发事件,并且您无需执行任何特殊操作来与 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!";
}