2008-09-11 2 views
3

私は以下のエラーが発生し、アプリケーションの使用の数時間後に毎日同じ時刻にスタックを呼び出します。誰が何が起きているのかについていくつかの光を当てることができますか?BufferedGraphicsContextエラー

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) 

答えて

3

このエラーの非常に長いMSDNフォーラムの説明はhereです。ほとんどの場合、エラーが明らかに関連付けられている次のいずれか

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

私は1年ほど前にこのエラーが発生していることを思い出していますが、長期的に使用可能なすべてのVMにアプリケーションを埋め込むというメモリ問題には間違いありませんでした。 。

+0

ポストに感謝...これは問題の原因のように聞こえる。 – joek1975

0

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

+0

私はそうは思わない... – joek1975

1

私はこの問題が古いことを知っていますが、手動でダブルバッファリングを実装した複数のコントロールを使用したときに同じ問題が発生し、わかりました。私にとって

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

BufferedGraphicsContext _BackbufferContext = BufferedGraphicsManager.Current; 

だから、私のすべてのコントロールは、私は常に同じであると仮定し現在コンテキストを、使用していました。 私は

ことによってそれを置き換えた後
BufferedGraphicsContext _BackbufferContext = new BufferedGraphicsContext(); 

すべてが望んでいたように動作します。

私はこれが少し役立つことを望みます。