2011-07-21 9 views
-3

私はそのミスをしています。ループを使用して描画するイメージの束を実行します。マルチスレッドも使用します。InvalidOperationException:オブジェクトは現在他の場所で使用されています!

この問題を引き起こす原因は何か?

私は、WinFormsのに

追加情報を使用します。

それは私がGetHDvメソッドの後にグラフィックスを使用する場合、ReleaseHDCメソッドを呼び出して私に語った。..

それが何を意味するのでしょうか?コードの

セクション:私はこれやった前

::次のように作成した

スレッド BackgroundWorker1.RunWorkerAsyncを();

今、私はこれをテストしてい:バック

のBackgroundWorker =新しいのBackgroundWorker(); back.runworkerAsync();

はその例外のルートですか?

+1

一般に、UIオブジェクトは、UIオブジェクトを作成したスレッド以外では使用できません。それは問題かもしれませんが、コードを見ずに話すのは難しいです。問題を実証する短くて完全なプログラムが本当に役に立ちます。 –

+0

スタックトレースを投稿できますか? (あなたの例外には1つが含まれているはずですが)推測を求める場合:同時に複数のスレッドでスレッドセーフではないリソースを使用しています...可能な解決策:同時アクセス状況 – DarkSquirrel42

+0

hmmmを削除してください。私は、winformに追加されたbackgroundworkerを使用しています。私はhaventにwinformに追加した別のスレッドを持っています。 –

答えて

1

本当にで何が起こっているthis page

によると、「オブジェクトが他の場所で、現在使用中の」GDI +は、それが使用しようと であることをデバイスコンテキスト(DC)が使用中」がすでにあることを訴えていることを です" WinFormsでは、一般に は、再帰的なGraphics.GetHdcが発生していることを意味します。 GetHdcは、他​​のGetHdcの前にReleaseHdcと一致する必要があります( )。

そして

あなたは 複数のスレッドからフォームに描画している場合は、この例外が発生することができます。また、 クロススレッド例外も発生する可能性があります。この場合の解決方法は、 に、図面を含むフォームにアクセスするときに複数のスレッドを使用しないことです。

+0

どうすれば複数のスレッドを使用できますか? –

+0

私はバックグラウンドワーカー(Backgroundworker1と呼ばれ、私が常時使用する)を使用しています。これはプログラム的に使用します。問題を解決する(新しいバックグラウンドワーカーは毎回作成されます) –

関連する問題