如何避免 Form.Invalidate() 中的闪烁?
我正在使用 f.Invalidate()
在 C# 程序中重新绘制图形,但图形在刷新时会闪烁。我还在 f_Paint()
方法中使用 e.Graphics.DrawImage()
。
I'm using f.Invalidate()
to repaint graphics in my C# program but the graphic blinks as it refreshes. I'm also using e.Graphics.DrawImage()
inside the f_Paint()
method.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要将属性
DoubleBuffered
设置为 true。由于它是受保护的财产,因此您需要自己进行控制:
You need to set the property
DoubleBuffered
to true.Since it's a protected property, you'll need to make your own control:
您可能需要首先对内存中的位图进行所有绘制,然后将该位图绘制到表单,以便一次将其全部绘制在屏幕上。
通过将缓冲区保持更长时间而不是每帧都重新创建它,可以提高效率。但不要保留
gr
,它应该在每次绘制时创建和处置。You may need to do all of your drawing to an in memory bitmap first, then paint that bitmap to the form so that it is all drawn on screen at once.
You can be more efficient by keeping
buffer
around longer and not recreating it every frame. but DON'T keepgr
around, it should be created and disposed each time you paint.人们说使用
DoubleBufferred = true;
,但您可以轻松地将表单上的DoubleBufferred
参数更改为true
,而无需使用代码。People say use
DoubleBufferred = true;
, but you can easily change theDoubleBufferred
parameter on the form totrue
, without needing to use code.