1 votes

Comment prévenir l'exception InvalidOperationException lors de l'utilisation de System.Drawing.Graphics ?

J'utilise le System.Drawing.Graphics.DrawLines(Pen pen, PointF[] points) dans une application multithread, mais la méthode System.Drawing.Graphics n'est pas partagé entre les threads.

Pourquoi il continue à jeter le System.InvalidOperationException: The object is currently in use elsewhere ?

2voto

Jon Skeet Points 692016

Réponse simple : ne le faites pas. N'accédez à l'interface graphique que sur le fil de discussion de l'interface graphique.

2voto

Jader Dias Points 23461

Le problème était que : J'utilisais la même instance de System.Drawing.Pen pour tous les threads. J'ai dû la cloner pour chaque thread afin de résoudre le problème.

var pens = new Pen[0];
lock (this._pens)
{
    pens = (Pen[])this._pens.Select(a => (Pen) a.Clone()).ToArray();
}

Même la serrure est essentielle pour résoudre ce problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X