【发布时间】:2017-09-08 01:20:34
【问题描述】:
我需要了解如何在一组命令之间创建延迟。我的背景是 C (DOS),现在在 Visual Studio 2015 中使用 C# 恢复概念。这是我正在努力解决的代码:
using System.Threading;
private void button1_Click(object sender, EventArgs e) // Button
{
int i;
for (i = 0; i < 10; i++)
{
textBox1.BackColor = Color.Red;
Thread.Sleep(100);
textBox1.BackColor = Color.Yellow;
Thread.Sleep(100);
}
}
我原以为文本框的背景颜色会交替变化 10 次,但循环结束后我只能看到黄色。如果我增加延迟,我会注意到程序需要时间才能完成。我浏览了一些相关文章,但无法理解重点。任何帮助将不胜感激。谢谢
【问题讨论】:
-
WinForms 是单线程的,您对
Thread.Sleep的调用将阻塞线程。您必须避免阻塞 UI 线程。文本框只会在控件屈服于WM_PAINT窗口消息处理程序时更改颜色,这在您的代码中从未发生过。 -
查看this article以了解如何使用代码块。