質問

アプリケーションを数時間使用した後、毎日同時に以下のエラーとコールスタックが発生します。何が起こっているのか誰かが解明できますか?

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)
役に立ちましたか?

解決

このエラーについては、MSDN フォーラムで非常に長い議論が行われています。 ここ. 。ほとんどの場合、エラーは明らかに次のいずれかに関連しています。

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

私は 1 年ほど前にこのエラーを自分で見たことを覚えています。これは明らかにメモリの問題に関連しており、長時間実行した後にアプリが利用可能な VM をすべて満杯にするため、#1 は私が観察した内容と一致しています。

他のヒント

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

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

BufferedGraphicsContext _BackbufferContext = BufferedGraphicsManager.Current;

したがって、私のすべてのコントロールは 現在 コンテキストは常に同じだと思います。それを置き換えた後

BufferedGraphicsContext _BackbufferContext = new BufferedGraphicsContext();

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top