BufferedGraphicsContext エラー
-
09-06-2019 - |
質問
アプリケーションを数時間使用した後、毎日同時に以下のエラーとコールスタックが発生します。何が起こっているのか誰かが解明できますか?
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 フォーラムで非常に長い議論が行われています。 ここ. 。ほとんどの場合、エラーは明らかに次のいずれかに関連しています。
- 根本的な OutOfMemory の問題。おそらくフレームワークのバグが原因で、BufferedGraphicsContext 例外として現れます。
- GDI オブジェクトのリーク (GDI オブジェクトを作成し、破棄しない)。
私は 1 年ほど前にこのエラーを自分で見たことを覚えています。これは明らかにメモリの問題に関連しており、長時間実行した後にアプリが利用可能な VM をすべて満杯にするため、#1 は私が観察した内容と一致しています。
他のヒント
この質問が古いことは知っていますが、同じ問題があり、手動ダブルバッファリングを実装した複数のコントロールを使用した場合にのみ表示されることがわかりました。
私にとって、この時点で問題が見つかりました。
BufferedGraphicsContext _BackbufferContext = BufferedGraphicsManager.Current;
したがって、私のすべてのコントロールは 現在 コンテキストは常に同じだと思います。それを置き換えた後
BufferedGraphicsContext _BackbufferContext = new BufferedGraphicsContext();
すべてが希望どおりに機能します。
これが少しでも役立つことを願っています。
暗闇の中でのショット - 複数のスレッドからペイントしていますか?ペイント関連の作業を行っている場合は、GUI スレッドで行うか、コードを慎重に同期してください。
所属していません StackOverflow