不能在循环中失效?

时间:2011-02-23 11:27:41

标签: c# winforms drawing

我有以下代码:

for(int I=0;I<10;I++) 
{  
 graphics.DrawImage(image, i*20,50);  
 invalidate(); 
}

但它在循环之后重新绘制。为什么呢?

编辑:我正在进行简单的动作,并希望在每一步之后更新。

2 个答案:

答案 0 :(得分:4)

因为它处于紧密循环中,所以直到循环结束后才会实际处理重绘。您可以通过在无效之后添加Application.DoEvents()来强制它处理重绘消息,如下所示:

for(int I=0;I<10;I++)
{
    graphics.DrawImage(image, i*20,50);
    invalidate(); 
    Application.DoEvents();
}

答案 1 :(得分:4)

因为Invalidate没有立即重绘,它只是告诉需要重绘。当方法完成,程序再次空闲时,将执行重绘。

快速而肮脏的解决方案是在Application.DoEvents()调用之后添加Invalidate,但我建议重写逻辑以使用计时器或类似的东西而不是使用循环来制作动画。