如何睡觉没有睡觉的父母或其他孩子形式的儿童形式

时间:2012-12-07 20:29:53

标签: c# sleep mdiparent

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

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

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

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!";
}