我創建具有2類C#螺紋鎖定問題
溶液類A具有一個公共靜態列表對象即public static List<MyClass> classes = new List<MyClass>();
B類具有使用類A的System.Threading.Timer和調用方法運行方法按時間間隔
A類有兩種方法 方法1:更新靜態列表 - 查找一個項目並增加它的屬性例如
classes[0].Id = i++;
方法2:返回靜態列表
但我不斷收到異常名單無法修改。
我想確保一次只有一個方法鎖定類對象。我能做些什麼來實現它?鎖(this)或鎖(classes)不起作用。
例外是沿着
list cannot be modifed when it is being enumerated.
它指向哪裏classes[0].Id
遞增
代碼行是行:
for (int i = 0; i< classes.Count;i++)
{
if (classes[i].Name == this.NameToFind)
{
classes[i].Id = n++;
}
}
請注意,我想修改類的列表對象作爲更新的對象正在由另一個方法返回。
什麼是異常消息的確切措辭?你在哪一行代碼中得到它?如果你發佈了更多的代碼,這可能會有幫助,所以我們可以看到發生了什麼。 –
也許你可以嘗試使用不同於List <>的類,可能是[System.Collections.Concurrent](http://msdn.microsoft.com/en-us/library/system.collections.concurrent.aspx)如果您使用的是4.0,或者至少實現了對列表的某些管理訪問 –
如果迭代列表時列表被修改,則會引發該類型的異常。這可以在foreach塊內的同一個線程上或單獨的線程中。 – eulerfx