我有一个多线程应用程序,我遇到了这个错误
************** Exception Text **************
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
at System.Collections.Generic.List`1.Enumerator.MoveNext()
...
我可能存在集合问题,因为我在一个线程上读取了我的集合,在另一个线程上修改了集合。
public readonly ObservableCollectionThreadSafe<GMapMarker> Markers = new ObservableCollectionThreadSafe<GMapMarker>();
public void problem()
{
foreach (GMapMarker m in Markers)
{
...
}
}
我试着用这个代码锁定集合,但不起作用。public void problem()
{
lock(Markers)
{
foreach (GMapMarker m in Markers)
{
...
}
}
}
有什么解决这个问题的想法吗?
foreach
内部的代码,请把它贴出来。 - nemesvObservableCollectionThreadSafe<T>
是什么?如果它是一个自定义集合,你能否在问题中包含它? - Theodor Zoulias