我的问题很简单:

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

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

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

最佳答案

sleep 发生在正确的位置,问题是您缺少第 4 步。真正发生的是

    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,问题的解决会变得更加复杂。

关于c# - Sleep() 以 "wrong"顺序执行。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25318742/

10-15 06:48