Sleep()以"错误"顺序执行.

Tau*_*lax 3 c# visual-studio-2013

我的问题很简单:

        label1.Text = "Start";
        Thread.Sleep(2000);
        label1.Text = "Finish";
Run Code Online (Sandbox Code Playgroud)

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

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

Sco*_*ain 8

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

    label1.Text = "Start";
    Thread.Sleep(2000);
    label1.Text = "Finish";
    DrawUpdatedValuesOfLabel1OnTheUI();
Run Code Online (Sandbox Code Playgroud)

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

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

public async Task YourFunction()
{
    label1.Text = "Start";
    await Task.Delay(2000);
    label1.Text = "Finish";
}
Run Code Online (Sandbox Code Playgroud)

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