Практическое руководство. Уменьшение эффекта дрожания изображения посредством двойной буферизации для форм и элементов управления

Двойная буферизация использует буфер памяти для решения проблем мерцания, связанных с несколькими операциями рисования. Если двойная буферизация включена, все операции рисования сначала обрабатываются в буфере памяти вместо области рисования на экране. После завершения всех операций рисования буфер памяти копируется непосредственно в связанную с ним область рисования. Поскольку на экране выполняется только одна операция графики, мерцание изображения, связанное с сложными операциями рисования, устраняется. Для большинства приложений двойная буферизация по умолчанию, предоставляемая платформой .NET Framework, сможет обеспечить наилучшие результаты. Стандартные элементы управления Windows Forms дважды буферизируются по умолчанию. Двойную буферизацию по умолчанию в формах и созданных элементах управления можно включить двумя способами. Можно либо задать для свойства DoubleBuffered значение true, либо вызвать метод SetStyle, чтобы задать для флага OptimizedDoubleBuffer значение true. Оба метода подключат двойное буферизацию по умолчанию для формы или элемента управления, обеспечив отрисовку графики без мерцания. Вызов метода SetStyle рекомендуется использовать только для пользовательских элементов управления, для которых написан весь код отрисовки.

В более сложных сценариях буферизации, например при анимации или расширенном управлении памятью, можно реализовать вашу собственную логику двойной буферизации. Дополнительные сведения см. в статье Практическое руководство. Управление буферизацией графики.

Уменьшение мерцания

  • Установите свойство DoubleBuffered в значение true.

    DoubleBuffered = true;
    
    DoubleBuffered = True
    
    

- или -

  • Вызовите метод SetStyle, чтобы задать для флага OptimizedDoubleBuffer значение true.

    SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
    
    SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    
    

См. также