如何避免在Form.Invalidate()中闪烁?

我正在使用f.Invalidate()在我的C#程序中重新绘制图形,但图形在刷新时闪烁。 我也在f_Paint()方法中使用e.Graphics.DrawImage()

您需要将DoubleBuffered设置为true。

由于它是受保护的属性,您需要自己控制:

 class Canvas : Control { public Canvas() { DoubleBufferred = true; } } 

您可能需要先将所有绘图绘制到内存位图中,然后将该位图绘制到表单中,以便立即在屏幕上绘制所有位图。

 Image buffer = new Bitmap(width, height, colorDepth); //I usually use 32BppARGB as my color depth Graphics gr = Graphics.fromImage(buffer); //Do all your drawing with "gr" gr.Dispose(); e.graphics.drawImage(buffer,0,0); buffer.Dispose(); 

通过将buffer保持更长时间并且不是每帧都重新创建buffer ,可以提高效率。 但是不要随意涂抹,每次涂漆都应该创造和处理。

人们说使用DoubleBufferred = true; ,但您可以轻松地将DoubleBufferred上的DoubleBufferred参数更改为true ,而无需使用代码。