【发布时间】:2012-10-03 13:13:17
【问题描述】:
我的印象是lock() 会阻止多个线程同时访问一个对象。
但是,以下代码仍然经常抛出 InvalidOperationException(对象当前在别处使用):
lock (this)
{
localCopy = (Bitmap)this.bm.Clone();
int x, y;
float pX = this.p.x;
int width = localCopy.Width;
x = (int)Math.Round((double)(pX * (float)width));
if (x >= localCopy.Width) x = localCopy.Width - 1;
y = (int)Math.Round((double)(this.p.y * (float)localCopy.Height));
if (y >= localCopy.Height) y = localCopy.Height - 1;
colourPixel = localCopy.GetPixel(x, y);
}
注意事项:
- 我拆分了
x的计算以隔离异常的原因。它似乎来自访问位图。 - 我尝试创建位图的本地副本,但这只会导致相同的异常。我试过
Clone()ing 并创建一个新的位图。两者都不起作用。 - 我尝试锁定
this(如图所示)和位图对象。两者都不起作用。
我是否试图以不应该的方式使用lock()?我误解了它的目的吗?如何防止InvalidOperationExceptions?
【问题讨论】:
标签: c# bitmap locking invalidoperationexception