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

发布于 2024-12-18 04:58:46 字数 137 浏览 2 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

海夕 2024-12-25 04:58:46

您需要将属性 DoubleBuffered 设置为 true。

由于它是受保护的财产,因此您需要自己进行控制:

class Canvas : Control {
    public Canvas() { 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:

class Canvas : Control {
    public Canvas() { DoubleBuffered = true; }
}
惯饮孤独 2024-12-25 04:58:46

您可能需要首先对内存中的位图进行所有绘制,然后将该位图绘制到表单,以便一次将其全部绘制在屏幕上。

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();

通过将缓冲区保持更长时间而不是每帧都重新创建它,可以提高效率。但不要保留 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.

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();

You can be more efficient by keeping buffer around longer and not recreating it every frame. but DON'T keep gr around, it should be created and disposed each time you paint.

牛↙奶布丁 2024-12-25 04:58:46

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

People say use DoubleBufferred = true;, but you can easily change the DoubleBufferred parameter on the form to true, without needing to use code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文