Frage

Ich erhalte die folgenden Fehler und Call-Stack zum gleichen Zeit jeden Tag nach mehreren Stunden nach der Anwendung verwenden. Kann jemand etwas Licht auf, was geschieht?

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)
War es hilfreich?

Lösung

Es gibt eine sehr lange MSDN Foren Diskussion dieser Fehler hier . In den meisten Fällen wird der Fehler offenbar im Zusammenhang mit entweder:

  1. Ein grundlegendes Problem OutOfMemory, die als BufferedGraphicsContext Ausnahme manifestiert, möglicherweise aufgrund eines Rahmen Fehler.
  2. Ein GDI-Objekt Leck (Erstellen von GDI-Objekte und Entsorgen sie nicht).

Ich erinnere dies sah mich ein Jahr Fehler oder so vor, und es war auf jeden Fall mit einem Speicher Problem verbunden, dass unsere App alle verfügbaren VM füllen, die nach einem langen Lauf, so # 1 übereinstimmt mit dem, was ich beobachtet habe.

Andere Tipps

Ich weiß, diese Frage ist alt, aber ich hatte das gleiche Problem und fand heraus, dass es nur auftauchte, wenn ich mehrere Steuerelemente verwendet, die eine manuelle doppelte Pufferung implementiert.

Für mich, ich das Problem an dieser Stelle gefunden:

BufferedGraphicsContext _BackbufferContext = BufferedGraphicsManager.Current;

Also all meine Steuerelemente verwendet, um den Aktuellen Kontext, die ich nehme immer gleich ist. Nach i ersetzt es durch

BufferedGraphicsContext _BackbufferContext = new BufferedGraphicsContext();

alles funktioniert wie wollte.

Ich hoffe, das ein wenig hilfreich ist.

ein Schuss im Dunkeln - malen Sie von mehreren Threads? Wenn Sie Malerei bezogene Arbeit tun, tun Sie es auf dem GUI-Thread oder synchronisieren Sie den Code sorgfältig aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top