为什么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”但太短,因为它发生在睡眠之后,这就是为什么你看不到它。
上述就是C#学习教程:为什么Thread.Sleep()以这种方式运行?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1012948.html