Как предотвратить InvalidOperationException при использовании System.Drawing.Graphics? - PullRequest
1 голос
/ 16 декабря 2009

Я использую метод System.Drawing.Graphics.DrawLines(Pen pen, PointF[] points) в многопоточном приложении, но System.Drawing.Graphics не разделяется между потоками.

Почему он продолжает выбрасывать System.InvalidOperationException: The object is currently in use elsewhere?

Ответы [ 2 ]

2 голосов
/ 16 декабря 2009

Проблема была в том, что я использовал один и тот же экземпляр System.Drawing.Pen для всех потоков. Мне пришлось клонировать его для каждого потока, чтобы решить эту проблему.

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

Даже замок необходим для решения этой проблемы

2 голосов
/ 16 декабря 2009

Простой ответ: не делай этого. Доступ только к GUI в потоке GUI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...