{{1}}
我正在编写一个简单的交通信号,并认为如果你能按下" Switch"它会更好看。按钮一次,从红色变为黄色到绿色,而不是每次按下它。但是,现在当我运行程序时,不是等待0.75秒来绘制黄色然后另外0.75秒来绘制绿色,它等待1.5秒并直接从红色变为绿色,不显示黄色一点都不。
答案 0 :(得分:0)
您的问题在Invalidate
方法
调用Invalidate方法不会强制执行同步绘制;至 强制同步绘制,调用后调用Update方法 无效方法。当没有参数调用此方法时, 整个客户区域被添加到更新区域。
因此,您需要在第一个Invalidate
之后添加对Update的调用if (figure.Equals("red"))
{
System.Threading.Thread.Sleep(750);
figure = "yellow";
Invalidate();
Update();
System.Threading.Thread.Sleep(750);
figure = "green";
Invalidate();
}
else if (figure.Equals("green"))
{
System.Threading.Thread.Sleep(750);
figure = "yellow";
Invalidate();
Update();
System.Threading.Thread.Sleep(750);
figure = "red";
Invalidate();
}
在第二次Invalidate之后无需调用Update,因为您的事件处理程序退出,因此系统可以接受对最后一次Invalidate的调用