跳过FillEllipse(C#)

时间:2016-10-25 11:49:39

标签: c# drawing

{{1}}

我正在编写一个简单的交通信号,并认为如果你能按下" Switch"它会更好看。按钮一次,从红色变为黄色到绿色,而不是每次按下它。但是,现在当我运行程序时,不是等待0.75秒来绘制黄色然后另外0.75秒来绘制绿色,它等待1.5秒并直接从红色变为绿色,不显示黄色一点都不。

1 个答案:

答案 0 :(得分:0)

您的问题在Invalidate方法

的MSDN页面中有说明
  

调用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的调用