C#lock对调用的方法不起作用

时间:2012-05-20 16:38:45

标签: c# synchronization locking

我刚开始用C#编程,我偶然发现了一个小问题 - 似乎无法正常工作,我得到一个“集合在枚举器后被修改了被实例化。“例外。

我的代码基本上是这样的:

private static object myLock = new object();

private Stack<MyObject> myObjects;

....

// Method that throws an exception
public void Update()
{
    lock(myLock)
    {
        foreach (MyObject ob in myObjects)
        {
            ob.Update(); // has a foreach loop of it's own
        }
    }

}

// Method invoked by a click event
public void InvokedMethod()
{
    lock(myLock)
    {
        myObjects.Push(new MyObject());
    }

}

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

这最有可能与你没有包含在foreach块中的代码有关 - 你在错过的代码中做了什么?如果您正在修改屏幕集合(添加或删除),这将导致您看到的异常。