如何避免在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
,而无需使用代码。