Включение двойной буферизации - PullRequest
1 голос
/ 19 ноября 2008

Я видел следующий код для включения двойной буферизации в winform:

// Activates double buffering 
this.SetStyle(ControlStyles.DoubleBuffer |
   ControlStyles.OptimizedDoubleBuffer |
   ControlStyles.UserPaint |
   ControlStyles.AllPaintingInWmPaint, true);
this.UpdateStyles();

Отличается ли это каким-либо образом от простой установки Form.DoubleBuffering = true?

Ответы [ 4 ]

5 голосов
/ 19 ноября 2008

Control.DoubleBuffering выполняет

SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, value);

поэтому ваш код также устанавливает ControlStyles.UserPaint (что, вероятно, не имеет никакого эффекта в данный момент).

2 голосов
/ 19 ноября 2008

Установка DoubleBuffering формы установит двойную буферизацию для этой формы. Это так же, как звонить

form.SetStyle(ControlStyles.OptimizedDoubleBuffer, value);

Другие флаги, такие как UserPaint и AllPaintingInWmPaint, являются стилями, которые не устанавливаются простой установкой control.DoubleBuffering = true

1 голос
/ 02 июня 2009

С Stackoverflow: как удвоить буферизацию элементов управления .NET на форме? :

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); 
}
1 голос
/ 19 ноября 2008

В .NET 1. x не было свойства DoubleBuffered для элементов управления, поэтому SetStyle был единственным способом включить его. Код вашего видения, который использует SetStyle, вероятно, либо все еще приблизительно равен 1. x дней, либо разработчиками, которые с тех пор просто не изменили свои привычки.

...