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. おそらくフレームワークのバグが原因で、BufferedGraphicsContext 例外として現れる根本的な OutOfMemory の問題。
  2. GDI オブジェクトのリーク (GDI オブジェクトを作成し、それらを破棄しない)。

1年ほど前にこのエラーを自分で見たことを思い出しました.これは間違いなくメモリの問題に関連しており、長時間実行した後にアプリが利用可能なすべてのVMをいっぱいにしたため、#1は私が観察したことに同意します.

于 2008-09-12T01:44:15.063 に答える
0

この質問は古いことは知っていますが、同じ問題があり、手動のダブルバッファリングを実装した複数のコントロールを使用した場合にのみ表示されることがわかりました。

私にとっては、この時点で問題が見つかりました:

BufferedGraphicsContext _BackbufferContext = BufferedGraphicsManager.Current;

したがって、すべてのコントロールは現在のコンテキストを使用していましたが、これは常に同じであると想定しています。私がそれを置き換えた後

BufferedGraphicsContext _BackbufferContext = new BufferedGraphicsContext();

すべてが望みどおりに機能します。

これが少し役立つことを願っています。

于 2014-01-22T12:23:23.350 に答える
0

暗闇でのショット - 複数のスレッドからペイントしていますか? ペイント関連の作業を行っている場合は、GUI スレッドで行うか、コードを慎重に同期してください。

于 2008-09-11T22:37:03.780 に答える