2

经过几个小时的应用程序使用后,我每天都在同一时间收到以下错误和调用堆栈。任何人都可以对正在发生的事情有所了解吗?

System.InvalidOperationException: BufferedGraphicsContext cannot be disposed of because a buffer operation is currently in progress.

at System.Drawing.BufferedGraphicsContext.Dispose(Boolean disposing)

at System.Drawing.BufferedGraphicsContext.Dispose()

at System.Drawing.BufferedGraphicsContext.AllocBufferInTempManager(Graphics targetGraphics, IntPtr targetDC, Rectangle targetRectangle)

at System.Drawing.BufferedGraphicsContext.Allocate(IntPtr targetDC, Rectangle targetRectangle)

at System.Windows.Forms.Control.WmPaint(Message& m)

at System.Windows.Forms.Control.WndProc(Message& m)

at System.Windows.Forms.ScrollableControl.WndProc(Message& m)

at System.Windows.Forms.ToolStrip.WndProc(Message& m)

at System.Windows.Forms.MenuStrip.WndProc(Message& m)

at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
4

3 回答 3

3

这里有一个关于这个错误的很长的 MSDN 论坛讨论。在大多数情况下,错误显然与以下任何一项有关:

  1. 潜在的 OutOfMemory 问题,表现为 BufferedGraphicsContext 异常,可能是由于框架错误。
  2. GDI 对象泄漏(创建 GDI 对象而不释放它们)。

我记得大约一年前我自己看到过这个错误,它肯定与内存问题有关,导致我们的应用程序在长时间运行后填满了所有可用的 VM,所以 #1 与我观察到的一致。

于 2008-09-12T01:44:15.063 回答
0

黑暗中的一枪——你是用多个线程绘画吗?如果您正在做与绘画相关的工作,请在 GUI 线程上进行或仔细同步您的代码。

于 2008-09-11T22:37:03.780 回答
0

我知道这个问题很老,但我遇到了同样的问题并发现它只出现在我使用多个实现手动双缓冲的控件时。

对我来说,我在这一点上发现了问题:

BufferedGraphicsContext _BackbufferContext = BufferedGraphicsManager.Current;

所以我所有的控件都使用了当前上下文,我假设它总是相同的。在我替换它之后

BufferedGraphicsContext _BackbufferContext = new BufferedGraphicsContext();

一切都如愿以偿。

我希望这有点帮助。

于 2014-01-22T12:23:23.350 回答