.net 使用System.Drawing.Graphics时如何防止无效操作异常?

.net 使用System.Drawing.Graphics时如何防止无效操作异常?,.net,graphics,concurrency,system.drawing,invalidoperationexception,.net,Graphics,Concurrency,System.drawing,Invalidoperationexception,我在多线程应用程序中使用了System.Drawing.Graphics.drawines(钢笔,PointF[]points)方法,但是System.Drawing.Graphics在线程之间不共享 为什么它一直抛出System.InvalidOperationException:该对象当前正在其他地方使用?简单回答:不要这样做。仅在GUI线程上访问GUI。简单回答:不要这样做。只能在GUI线程上访问GUI。问题是:我对所有线程使用了相同的System.Drawing.Pen实例。为了解决这个

我在多线程应用程序中使用了
System.Drawing.Graphics.drawines(钢笔,PointF[]points)
方法,但是
System.Drawing.Graphics
在线程之间不共享


为什么它一直抛出
System.InvalidOperationException:该对象当前正在其他地方使用

简单回答:不要这样做。仅在GUI线程上访问GUI。

简单回答:不要这样做。只能在GUI线程上访问GUI。

问题是:我对所有线程使用了相同的System.Drawing.Pen实例。为了解决这个问题,我必须为每个线程克隆它

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

要解决此问题,即使是锁也是必不可少的

问题是:我对所有线程使用了相同的System.Drawing.Pen实例。为了解决这个问题,我必须为每个线程克隆它

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

为了解决这个问题,即使是锁也是必不可少的

它也可能发生在GUI项目中。请保留您的答案,以便其他用户可以从中受益。这可能发生在GUI项目中。请保留您的答案,以便其他用户可以从中受益。