2012-05-20 20 views
0

我剛剛開始在C#中編程,並且我偶然發現了一個小問題 - 鎖定似乎不起作用,並且我收到了一個「集合被修改後枚舉器被實例化。「例外。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()); 
    } 

} 

我在做什麼錯?

謝謝!

+5

你在做什麼'foreach'?那麼爲什麼該部分足夠重要,如果你只是遍歷'screen'而不是'myObjects'呢? – Oded

+2

請顯示更多代碼。你可能在循環中調用'InvokedMethod'? –

+1

嘗試用空的foreach或只在foreach中打印某些內容到控制檯 – kravemir

回答

3

這很可能與您沒有包含在foreach塊中的代碼有關 - 您在代碼中做了什麼,你錯過了什麼?如果您正在修改屏幕集合(添加或刪除),則會導致您看到的異常。