BufferedGraphicsContext Ошибка - PullRequest
       10

BufferedGraphicsContext Ошибка

3 голосов
/ 12 сентября 2008

Я получаю сообщение об ошибке и стек вызовов в одно и то же время каждый день после нескольких часов использования приложения. Может кто-нибудь пролить свет на происходящее?

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)

Ответы [ 3 ]

3 голосов
/ 12 сентября 2008

Существует очень долгое обсуждение этой ошибки на форумах MSDN здесь . В большинстве случаев ошибка, по-видимому, связана либо с:

  1. Основная проблема OutOfMemory, которая проявляется как исключение BufferedGraphicsContext, возможно, из-за ошибки в структуре.
  2. Утечка объектов GDI (создание объектов GDI, а не их удаление).

Я помню, что видел эту ошибку сам год или около того назад, и она определенно была связана с проблемой памяти, из-за которой наше приложение заполняло все доступные виртуальные машины после длительного запуска, поэтому # 1 согласуется с тем, что я наблюдал.

1 голос
/ 22 января 2014

Я знаю, что этот вопрос старый, но у меня была та же проблема, и я обнаружил, что он появился только тогда, когда я использовал несколько элементов управления, которые реализовали двойную буферизацию вручную.

Для меня я нашел проблему в этом пункте:

BufferedGraphicsContext _BackbufferContext = BufferedGraphicsManager.Current;

Так что все мои элементы управления использовали контекст Current , который, как я полагаю, всегда один и тот же. После того, как я заменил его на

BufferedGraphicsContext _BackbufferContext = new BufferedGraphicsContext();

все работает как хотел.

Надеюсь, это немного полезно.

0 голосов
/ 12 сентября 2008

выстрел в темноте - вы рисуете из нескольких нитей? Если вы выполняете работу, связанную с рисованием, делайте это в потоке графического интерфейса или тщательно синхронизируйте код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...