Sleep()在"错误"中执行订购。

时间:2014-08-14 22:43:58

标签: c# visual-studio-2013

我的问题很简单:

        label1.Text = "Start";
        Thread.Sleep(2000);
        label1.Text = "Finish";

为什么Sleep()会在标签变为" Start"之前发生?

如何更改标签,然后再睡眠,然后再次更改?

1 个答案:

答案 0 :(得分:8)

睡眠发生在正确的位置,问题是你缺少第四步。真正发生的是

    label1.Text = "Start";
    Thread.Sleep(2000);
    label1.Text = "Finish";
    DrawUpdatedValuesOfLabel1OnTheUI();

在执行返回“消息循环”之前,UI不会更新,您需要在等待两秒钟时将控制返回到消息循环,以便获得更新的UI。

如果您使用的是.NET 4.5,最简单的方法是使用async / await将Sleep更改为Delay

public async Task YourFunction()
{
    label1.Text = "Start";
    await Task.Delay(2000);
    label1.Text = "Finish";
}

如果您不使用.NET 4.5,问题会变得复杂得多。