1

System.Drawing.Graphics.DrawLines(Pen pen, PointF[] points)マルチスレッド アプリケーションでメソッドを使用していますが、System.Drawing.Graphicsスレッド間で共有されていません。

なぜ投げ続けるのSystem.InvalidOperationException: The object is currently in use elsewhereですか?

4

2 に答える 2

2

問題は、すべてのスレッドで同じ System.Drawing.Pen インスタンスを使用していたことです。問題を解決するには、スレッドごとにクローンを作成する必要がありました。

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

この問題を解決するには、ロックさえも不可欠です

于 2009-12-16T19:42:12.427 に答える
2

簡単な答え: そうしないでください。GUI スレッドでのみ GUI にアクセスします。

于 2009-12-16T19:36:59.130 に答える