Domanda

Ricevo il seguente errore e stack di chiamate al tempo stesso tutti i giorni dopo diverse ore di utilizzo dell'applicazione.Qualcuno può far luce su ciò che sta accadendo?

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)
È stato utile?

Soluzione

Vi è una lunga MSDN forum di discussione di questo errore qui.Nella maggior parte dei casi l'errore è apparentemente associato con:

  1. Un sottostante di OutOfMemory problema, che si manifesta come il BufferedGraphicsContext eccezione, forse a causa di un quadro di bug.
  2. Una perdita di oggetti GDI (creazione di oggetti GDI e non disponendo di loro).

Mi ricordo di avere visto questo errore me un anno fa, ed è sicuramente associato con un problema di memoria che hanno reso la nostra app riempire tutti disponibili VM dopo un lungo periodo, in modo #1, concorda con quello che ho osservato.

Altri suggerimenti

So che questa domanda è vecchia, ma ho avuto lo stesso problema e ho scoperto, che non solo ha mostrato, quando ho usato più controlli che hanno implementato il manuale doppio buffer.

Per me, ho trovato il problema, a questo punto:

BufferedGraphicsContext _BackbufferContext = BufferedGraphicsManager.Current;

Così tutti i miei controlli utilizzato il Corrente contesto, che presumo sia sempre la stessa.Dopo che ho sostituito dall'

BufferedGraphicsContext _BackbufferContext = new BufferedGraphicsContext();

tutto funziona come volevo.

Spero che questo sia un po ' utile.

uno sparo nel buio - e-pittura da più thread?Se si sta facendo la pittura relativi lavori, di farlo sul thread della GUI o sincronizzare il tuo codice con attenzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top