双缓冲图形

闪烁是图形编程的一个常见问题。 需要多重复杂绘制操作的图形操作会导致呈现的图像闪烁或具有其他不可接受的外观。 为解决这些问题,.NET Framework 提供了对双缓冲的使用。

双缓冲使用内存缓冲区来解决由多重绘制操作造成的闪烁问题。 当启用双缓冲时,所有绘制操作首先呈现到内存缓冲区,而不是屏幕上的绘图图面。 所有绘制操作完成后,内存缓冲区直接复制到与其关联的绘图图面。 因为在屏幕上只执行一个图形操作,所以消除了由复杂绘制操作造成的图像闪烁。

默认双缓冲

在应用程序中使用双缓冲的最简便的方法是使用 .NET Framework 为窗体和控件提供的默认双缓冲。 通过将 DoubleBuffered 属性设置为 true 或使用 SetStyle 方法可以为 Windows 窗体和所创作的 Windows 控件启用默认双缓冲。 有关更多信息,请参见 如何:通过对窗体和控件使用双缓冲来减少图形闪烁

手动管理缓冲的图形

对于更多的高级双缓冲情形(如动画或高级内存管理),可以使用 .NET Framework 中的类实现自己的双缓冲逻辑。 负责单独分配和管理图形缓冲区的类是 BufferedGraphicsContext 类。 每个应用程序域都有自己的默认 BufferedGraphicsContext 实例来管理此应用程序的所有默认双缓冲。 大多数情况下,每个应用程序只有一个应用程序域,所以每个应用程序通常只有一个默认 BufferedGraphicsContext。 默认 BufferedGraphicsContext 实例由 BufferedGraphicsManager 类管理。 通过调用 BufferedGraphicsManager.Current 属性可以检索对默认 BufferedGraphicsContext 实例的引用。 还可以创建一个专用的 BufferedGraphicsContext 实例以提高图形密集型应用程序的性能。 有关如何创建 BufferedGraphicsContext 实例的信息,请参见 如何:手动管理缓冲图形

手动显示缓冲的图形

通过调用 BufferedGraphicsContext.Allocate 方法(该方法返回 BufferedGraphics 类的实例),可以使用 BufferedGraphicsContext 类的实例创建图形缓冲区。 BufferedGraphics 对象管理与呈现图面(如窗体或控件)关联的内存缓冲区。

BufferedGraphics 类在实例化后将图形呈现到内存的图形缓冲区中。 通过 BufferedGraphics.Graphics 属性可以在内存缓冲区中呈现图形,该属性公开了一个直接表示内存缓冲区的 Graphics 对象。 可以绘制到此 Graphics 对象,这与绘制到表示绘图图面的 Graphics 对象一样。 所有图形绘制到缓冲区后,可以使用 BufferedGraphics.Render 方法将缓冲区的内容复制到屏幕上的绘图图面。

有关使用 BufferedGraphics 类的更多信息,请参见手动呈现缓冲的图形。 有关呈现图形的更多信息,请参见 Windows 窗体中的图形和绘制

请参见

任务

如何:手动呈现缓冲图形

如何:通过对窗体和控件使用双缓冲来减少图形闪烁

如何:手动管理缓冲图形

参考

BufferedGraphics

BufferedGraphicsContext

BufferedGraphicsManager

其他资源

Windows 窗体中的图形和绘制