如何避免在Form.Invalidate()中闪烁
本文关键字:闪烁 Invalidate 何避免 Form | 更新日期: 2023-09-27 18:15:53
我使用f.Invalidate()
在我的c#程序中重新绘制图形,但图形在刷新时闪烁。我还在f_Paint()
方法内使用e.Graphics.DrawImage()
需要设置属性DoubleBuffered
为true
因为它是一个受保护的属性,你需要创建你自己的控件:
class Canvas : Control {
public Canvas() { DoubleBuffered = 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
保持更长的时间,而不是每帧都重新创建它,可以提高效率。但是不要把gr
保存在周围,它应该在每次绘画时创建和处理。
人们说使用DoubleBufferred = true;
,但您可以轻松地将表单上的DoubleBufferred
参数更改为true
,而无需使用代码。