Двойная буферизация графикиDouble Buffered Graphics

Мерцание является распространенной проблемой при программировании графики.Flicker is a common problem when programming graphics. Графические операции, требующие нескольких сложных операций рисования, могут вызвать мерцание отображаемых изображений или иным образом нарушить их восприятие.Graphics operations that require multiple complex painting operations can cause the rendered images to appear to flicker or have an otherwise unacceptable appearance. Чтобы устранить эти проблемы, .NET Framework предоставляет доступ к двойной буферизации.To address these problems, the .NET Framework provides access to double buffering.

Двойная буферизация использует буфер памяти для решения проблем мерцания, связанных с несколькими операциями рисования.Double buffering uses a memory buffer to address the flicker problems associated with multiple paint operations. Если двойная буферизация включена, все операции рисования сначала обрабатываются в буфере памяти вместо области рисования на экране.When double buffering is enabled, all paint operations are first rendered to a memory buffer instead of the drawing surface on the screen. После завершения всех операций рисования буфер памяти копируется непосредственно в связанную с ним область рисования.After all paint operations are completed, the memory buffer is copied directly to the drawing surface associated with it. Поскольку на экране выполняется лишь одна графическая операция, удается избежать мерцания, связанного со сложными операциями рисования.Because only one graphics operation is performed on the screen, the image flickering associated with complex painting operations is eliminated.

Двойная буферизация по умолчаниюDefault Double Buffering

Самый простой способ использования двойной буферизации в приложении — использование двойной буферизации по умолчанию для форм и элементов управления, предоставляемой .NET Framework.The easiest way to use double buffering in your applications is to use the default double buffering for forms and controls that is provided by the .NET Framework. Вы можете включить двойную буферизацию для форм Windows Forms и элементов управления Windows, задав DoubleBuffered свойства true или с помощью SetStyle метод.You can enable default double buffering for your Windows Forms and authored Windows controls by setting the DoubleBuffered property to true or by using the SetStyle method. Дополнительные сведения см. в разделе Практическое руководство. Уменьшение эффекта дрожания изображения посредством двойной буферизации для форм и элементов управления.For more information, see How to: Reduce Graphics Flicker with Double Buffering for Forms and Controls.

Управление буферизацией графики вручнуюManually Managing Buffered Graphics

В более сложных сценариях буферизации, например при анимации или сложном управлении памятью, можно использовать классы .NET Framework для реализации вашей собственной логики двойной буферизации.For more advanced double buffering scenarios, such as animation or advanced memory management, you can use the .NET Framework classes to implement your own double-buffering logic. Этот класс отвечает за выделение и управление отдельных буферов графики является BufferedGraphicsContext класса.The class responsible for allocating and managing individual graphics buffers is the BufferedGraphicsContext class. Каждый домен приложения имеет свой собственный по умолчанию BufferedGraphicsContext экземпляр, который управляет всеми двойную буферизацию для этого приложения.Every application domain has its own default BufferedGraphicsContext instance that manages all of the default double buffering for that application. В большинстве случаев будет существовать только один домен приложения для каждого приложения, поэтому обычно есть одно значение по умолчанию BufferedGraphicsContext каждого приложения.In most cases there will be only one application domain per application, so there is generally one default BufferedGraphicsContext per application. По умолчанию BufferedGraphicsContext управлять экземплярами с BufferedGraphicsManager класса.Default BufferedGraphicsContext instances are managed by the BufferedGraphicsManager class. Можно получить ссылку на значение по умолчанию BufferedGraphicsContext экземпляр путем вызова Current.You can retrieve a reference to the default BufferedGraphicsContext instance by calling the Current. Можно также создать выделенную BufferedGraphicsContext экземпляр, который может повысить производительность графические приложения.You can also create a dedicated BufferedGraphicsContext instance, which can improve performance for graphically intensive applications. Дополнительные сведения о создании BufferedGraphicsContext см. в разделе как: управление буферизацией графики.For information on how to create a BufferedGraphicsContext instance, see How to: Manually Manage Buffered Graphics.

Вывод буферизованной графики вручнуюManually Displaying Buffered Graphics

Можно использовать экземпляр BufferedGraphicsContext класса, чтобы создать буферы графики, вызвав BufferedGraphicsContext.Allocate, который возвращает экземпляр класса BufferedGraphics класса.You can use an instance of the BufferedGraphicsContext class to create graphics buffers by calling the BufferedGraphicsContext.Allocate, which returns an instance of the BufferedGraphics class. Объект BufferedGraphics управляет буфером памяти, связанный с поверхностью отрисовки, например формы или элемента управления.A BufferedGraphics object manages a memory buffer that is associated with a rendering surface, such as a form or control.

После создания экземпляра, BufferedGraphics класс управляет отрисовки в буфер в памяти графики.After it is instantiated, the BufferedGraphics class manages rendering to an in-memory graphics buffer. Можно подготовить к просмотру графический буфер памяти через Graphics, который предоставляет Graphics объект, который непосредственно представляет буфера памяти.You can render graphics to the memory buffer through the Graphics, which exposes a Graphics object that directly represents the memory buffer. Вы можете отобразить к этому Graphics объекта так же, как и для Graphics , представляющий поверхность рисования.You can paint to this Graphics object just as you would to a Graphics object that represents a drawing surface. После графики в буфер, можно использовать BufferedGraphics.Render следует скопировать содержимое буфера на поверхность рисования на экране.After all the graphics have been drawn to the buffer, you can use the BufferedGraphics.Render to copy the contents of the buffer to the drawing surface on the screen.

Дополнительные сведения об использовании BufferedGraphics см. в описании вручную визуализации буферизацией графики.For more information on using the BufferedGraphics class, see Manually Rendering Buffered Graphics. Дополнительные сведения об отрисовке графики см. в разделе Объекты Graphics и Drawing в Windows Forms.For more information on rendering graphics, see Graphics and Drawing in Windows Forms

См. такжеSee Also

BufferedGraphics
BufferedGraphicsContext
BufferedGraphicsManager
Практическое руководство. Прорисовка буферизированной графики вручнуюHow to: Manually Render Buffered Graphics
Практическое руководство. Уменьшение эффекта мерцания изображения посредством двойной буферизации для форм и элементов управленияHow to: Reduce Graphics Flicker with Double Buffering for Forms and Controls
Практическое руководство. Управление буферизацией графики вручнуюHow to: Manually Manage Buffered Graphics
Объекты Graphics и Drawing в Windows FormsGraphics and Drawing in Windows Forms