在用户控件中,何时设置 DoubleBuffered = false 有意义?

At a user control, when setting of DoubleBuffered = false makes sense?

我创建了一个用户控件,我使用单个 Graphics.DrawImage() 绘制控件的全部内容。 “绘画再简单不过了”我想“所以闪烁应该绝对消除。”但是重绘时的闪烁仍然存在,直到我将 DoubleBuffered 属性 设置为 true.

为什么设置DoubleBuffered = false作为默认值,即使在最琐碎的绘画情况下也会导致闪烁?为什么他们没有锁定绘画机制永久双缓冲?是否存在 DoubleBuffered = false 有意义的用例?

默认情况下,所有标准 .NET Framework 控件都是双缓冲的。

当您使用自定义绘制逻辑创建自己的控件时,您可以指定是否要使用 .NET Framework(DoubleBuffered = trueSetStyle(ControlStyles.OptimizedDoubleBuffer, true))提供的双缓冲。

对于你自己的控件,如果你想使用你自己的双缓冲逻辑(特别是动画或高级内存管理),你应该将它设置为 false,主要涉及 class BufferedGraphicsContext.

Heres link 更详细地描述双缓冲图形的 MSDN

总结

根据我接受的答案(以及下面的讨论)整理结果,
DoubleBuffered 设置为 false 在以下情况下有意义:

  • 你自己实现双缓冲(涉及classBufferedGraphicsContext

  • 控件是否闪烁无所谓

类似答案:Why is DoubleBuffered disabled by default?(适用于表单,但也适用于控件。)