我创建具有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