在用户控件中,何时设置 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 = true
或 SetStyle(ControlStyles.OptimizedDoubleBuffer, true)
)提供的双缓冲。
对于你自己的控件,如果你想使用你自己的双缓冲逻辑(特别是动画或高级内存管理),你应该将它设置为 false
,主要涉及 class BufferedGraphicsContext
.
Heres link 更详细地描述双缓冲图形的 MSDN
总结
根据我接受的答案(以及下面的讨论)整理结果,
DoubleBuffered
设置为 false
在以下情况下有意义:
你自己实现双缓冲(涉及classBufferedGraphicsContext
)
控件是否闪烁无所谓
类似答案:Why is DoubleBuffered disabled by default?(适用于表单,但也适用于控件。)
我创建了一个用户控件,我使用单个 Graphics.DrawImage()
绘制控件的全部内容。 “绘画再简单不过了”我想“所以闪烁应该绝对消除。”但是重绘时的闪烁仍然存在,直到我将 DoubleBuffered
属性 设置为 true
.
为什么设置DoubleBuffered = false
作为默认值,即使在最琐碎的绘画情况下也会导致闪烁?为什么他们没有锁定绘画机制永久双缓冲?是否存在 DoubleBuffered = false
有意义的用例?
默认情况下,所有标准 .NET Framework 控件都是双缓冲的。
当您使用自定义绘制逻辑创建自己的控件时,您可以指定是否要使用 .NET Framework(DoubleBuffered = true
或 SetStyle(ControlStyles.OptimizedDoubleBuffer, true)
)提供的双缓冲。
对于你自己的控件,如果你想使用你自己的双缓冲逻辑(特别是动画或高级内存管理),你应该将它设置为 false
,主要涉及 class BufferedGraphicsContext
.
Heres link 更详细地描述双缓冲图形的 MSDN
总结
根据我接受的答案(以及下面的讨论)整理结果,
DoubleBuffered
设置为 false
在以下情况下有意义:
你自己实现双缓冲(涉及class
BufferedGraphicsContext
)控件是否闪烁无所谓
类似答案:Why is DoubleBuffered disabled by default?(适用于表单,但也适用于控件。)