我的问题很简单:
label1.Text = "Start";
Thread.Sleep(2000);
label1.Text = "Finish";
为什么Sleep()会在标签变为" Start"之前发生?
如何更改标签,然后再睡眠,然后再次更改?
答案 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,问题会变得复杂得多。