我的问题很简单:
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/