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

Cde*_*eez 1 c# multithreading

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

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

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

为什么会这样?

Aph*_*ion 11

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

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

Application.DoEvents();
Thread.Sleep(1000);
Run Code Online (Sandbox Code Playgroud)

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

  • 值得注意的是,"DoEvents"并不特定于绘制事件,它只是处理队列中的任何剩余消息. (3认同)