为什么Thread.Sleep()以这种方式运行?

这是我编写的一个简单代码:

private void button1_Click(object sender, EventArgs e) { label1.Text = "first"; Thread.Sleep(1000); label1.Text = "second"; } 

但标签从不显示“第一”。 我使用断点检查并且语句label1.text =“first”被执行但是在标签中没有显示“first”,只显示“second”。

为什么会这样?

那是因为你让主线程睡了。 因此无法将新文本绘制到标签上。

您可以使用以下命令“强制”处理队列中的(paint)事件:

 Application.DoEvents(); Thread.Sleep(1000); 

但是请阅读这个问题’使用Application.DoEvents()’

执行Thread.Sleep的那一刻,UI线程正在hibernate。 因此,不会执行负责更新UI的代码(它可以在您返回button1_Click方法时执行)并且您没有看到结果。

根据我所学到的,编译器选择最好先编译哪一行。 因此,如果您评论label1.Text =“second”,它应该在1秒延迟后在您的标签中显示“first”。 您可以通过这样做来certificate:

 private void button1_Click(object sender, EventArgs e) { label1.Text = "first"; Thread.Sleep(1000); if (label1.Text == "first") { label1.Text = "second"; } } 

它仍将显示“秒”,因为label1.Text设置为“first”但太短,因为它发生在睡眠之后,这就是为什么你看不到它。