Question

Je reçois l'erreur ci-dessous et la pile d'appels en même temps tous les jours après plusieurs heures d'utilisation de l'application.Quelqu'un peut-il faire la lumière sur ce qui se passe ?

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)
Était-ce utile?

La solution

Il y a une très longue discussion sur les forums MSDN à propos de cette erreur ici.Dans la plupart des cas, l'erreur est apparemment associée à :

  1. Un problème OutOfMemory sous-jacent, qui se manifeste sous la forme d'une exception BufferedGraphicsContext, probablement en raison d'un bug de framework.
  2. Une fuite d'objet GDI (création d'objets GDI et ne pas les supprimer).

Je me souviens avoir moi-même vu cette erreur il y a environ un an, et elle était définitivement associée à un problème de mémoire qui faisait que notre application remplissait toutes les machines virtuelles disponibles après une longue exécution, donc le numéro 1 est d'accord avec ce que j'ai observé.

Autres conseils

Je sais que cette question est ancienne, mais j'ai eu le même problème et j'ai découvert qu'il n'apparaissait que lorsque j'utilisais plusieurs contrôles implémentant une double mise en mémoire tampon manuelle.

Pour ma part, j'ai trouvé le problème à ce stade :

BufferedGraphicsContext _BackbufferContext = BufferedGraphicsManager.Current;

Donc tous mes contrôles utilisaient le Actuel contexte, qui, je suppose, est toujours le même.Après l'avoir remplacé par

BufferedGraphicsContext _BackbufferContext = new BufferedGraphicsContext();

tout fonctionne comme je voulais.

J'espère que c'est un peu utile.

une photo dans le noir – peignez-vous à partir de plusieurs fils ?Si vous effectuez un travail lié à la peinture, faites-le sur le fil de l'interface graphique ou synchronisez soigneusement votre code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top