【发布时间】:2018-11-11 22:17:32
【问题描述】:
此代码模仿了我在应用中遇到的问题。
private void button1_Click(object sender, EventArgs e)
{
button1.BackColor = Color.Red;
Thread.Sleep(3000);
button1.BackColor = Color.Green;
}
我希望这段代码能够;
- 将按钮设为红色
- 等待 3 秒
- 将按钮设为绿色
但它正在等待 3 秒,然后将按钮变为绿色。我不能从一开始就将按钮设为绿色,因为这在我更大的应用程序中不起作用。
有谁知道出了什么问题以及我该如何解决?提前致谢。
【问题讨论】:
-
您的 GUI 线程没有机会更新 UI 以使用红色。尝试使用异步编程模型和 Task.Delay。现在只需在 3 秒睡眠之前添加一个 Thread.Sleep(0) 。我认为这应该可行。
-
绘制屏幕不会立即发生,它作为事件队列中的事件发生。只有在您从当前事件返回后才会处理事件。所以按钮认为它是红色的,但它永远无法绘制到屏幕上,因为你没有返回,并给“绘制”事件一个机会。
标签: c# thread-sleep