2011-07-21 3 views
-3

Je reçois cette erreur .. J'utilise une boucle pour parcourir un tas d'images à tracer .. J'utilise également multithreading ..InvalidOperationException: les objets sont actuellement utilisés ailleurs!

Qu'est-ce qui pourrait causer ce problème et comment pourrait-il être évité?

J'utilise WinForms

Informations complémentaires:

il me dit si j'utiliser des graphiques après la méthode GetHDv, appelez la méthode ReleaseHDC ..

Qu'est-ce que cela signifie?

section du code:

Un fil créé comme ceci:

Avant que je l'ai fait: BackgroundWorker1.RunWorkerAsync(); Maintenant, je teste

avec ceci:

BackgroundWorker retour = new BackgroundWorker(); back.runworkerAsync();

est-ce la racine de l'exception?

+1

En général, les objets d'interface utilisateur ne peuvent pas être utilisés autrement que sur le thread qui les a créés. C'est peut-être le problème, mais c'est difficile à dire sans voir de code. Un programme court mais complet démontrant le problème serait vraiment utile. –

+0

pourriez-vous poster une trace de pile? (votre exception devrait en contenir un) mais si vous demandez une supposition: vous utilisez une ressource non-threadsafe dans plus d'un thread en même temps ... solution possible: supprimez la situation d'accès simultané – DarkSquirrel42

+0

hmmm. J'utilise un backgroundworker que j'ai ajouté à la winform .. à part ça, je n'ai pas un autre thread que j'ai ajouté à la winform –

Répondre

1

Selon this page

Qu'est-ce qui se passe vraiment avec « l'objet est actuellement utilisé ailleurs » est que GDI + se plaint que le contexte de périphérique (DC) qu'il est essayer d'utiliser est déjà « en cours d'utilisation ". Avec WinForms, ceci généralement signifie qu'il y a un Graphics.GetHdc récursif. GetHdc doit correspondre à un ReleaseHdc avant tout autre GetHdc.

Et

Vous pouvez rencontrer cette exception si vous dessinez une forme de plusieurs threads. Vous rencontrerez probablement également une exception d'inter-threading . La solution dans ce cas est n'utilisez pas plusieurs threads lors de l'accès à un formulaire, y compris le dessin.

+0

Comment puis-je utiliser plusieurs threads ..? –

+0

J'ai un background worker (appelé: Backgroundworker1, que j'utilise constamment ,,) si j'en utilise un par programme..il résoudra le problème (un nouveau worker d'arrière-plan sera créé à chaque fois) –

Questions connexes