winforms - doble - double buffered visual studio
Habilitar doble almacenamiento en bĂșfer (4)
He visto el siguiente código para habilitar el doble almacenamiento en memoria en un winform:
// Activates double buffering
this.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);
this.UpdateStyles();
¿Es esto diferente de simplemente configurar Form.DoubleBuffering = true?
Configurar DoubleBuffering de un formulario establecerá doble búfer para ese formulario. Es lo mismo que llamar
form.SetStyle(ControlStyles.OptimizedDoubleBuffer, value);
Las otras banderas como UserPaint y AllPaintingInWmPaint son estilos que no se configuran simplemente configurando control.DoubleBuffering = true
En .NET DoubleBuffered
no DoubleBuffered
propiedad DoubleBuffered
en los controles, por lo que SetStyle
era la única forma de habilitarlo. Codifique su vista que utiliza SetStyle
probablemente todavía esté alrededor de 1. x días, o de desarrolladores que simplemente no han cambiado sus hábitos desde entonces.
Control.DoubleBuffering
realiza
SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, value);
por lo que su código también establece ControlStyles.UserPaint
(que probablemente no tenga ningún efecto en este punto).
De : ¿Cómo duplicar los controles .NET de buffer en un formulario? :
public static void SetDoubleBuffered(System.Windows.Forms.Control c)
{
//Taxes: Remote Desktop Connection and painting
//http://blogs.msdn.com/oldnewthing/archive/2006/01/03/508694.aspx
if (System.Windows.Forms.SystemInformation.TerminalServerSession)
return;
System.Reflection.PropertyInfo aProp = typeof(System.Windows.Forms.Control).GetProperty(
"DoubleBuffered",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
aProp.SetValue(c, true, null);
}