这是我编写的一个简单代码:
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "first";
Thread.Sleep(1000);
label1.Text = "second";
}
但标签从不显示'第一'。我使用断点检查并且语句label1.text =“first”被执行但是在标签中没有显示“first”,只显示“second”。
为什么会这样?
答案 0 :(得分:10)
那是因为你让主线程睡了。因此,它无法将新文本绘制到标签上。
您可以使用以下命令“强制”处理队列中的(paint)事件:
Application.DoEvents();
Thread.Sleep(1000);
然而,请阅读this问题'使用Application.DoEvents()'
答案 1 :(得分:2)
执行Thread.Sleep
时,UI线程正在休眠。因此,负责更新UI的代码不会被执行(它可以在button1_Click
方法返回后尽快执行)并且您看不到结果。
答案 2 :(得分:0)
从我所学到的,编译器选择最好先编译哪一行。因此,如果您要评论label1.Text =“second”,它应该在1秒延迟后在您的标签中显示“first”。 您可以通过这样做证明:
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "first";
Thread.Sleep(1000);
if (label1.Text == "first")
{
label1.Text = "second";
}
}
并且它仍然会显示“秒”,因为label1.Text设置为“first”但是太短,因为它发生在睡眠之后,这就是为什么你看不到它。