0

我正在构建一个总共有 5 个表单的程序。1 个 MDIContainer 和 4 个 MDIChildren。

我目前thread.sleep(1000)每个 MDIChild 都有一个。执行操作时,我仍然需要其他 3 个 MDIChilds 才能工作和交互。但是,现在当thread.sleep(1000)调用 时,整个程序会休眠 1 秒,我必须等待休眠完成,然后才能与任何其他形式进行交互。

有没有办法让单一表格睡眠?如果是这样,请如何和示例。

4

1 回答 1

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!";
}
于 2012-12-07T20:39:55.610 回答