修改了获取超额收集;枚举操作可能无法执行
本文关键字:操作 执行 枚举 获取 修改 | 更新日期: 2023-09-27 17:56:26
我有一个字符串列表List<string> mylist
.我有一个后台操作,可以将字符串添加到此列表中。我使用另一个后台操作来处理此列表中的字符串
foreach (string pfile in mylist)
{
//dostuff
}
这会导致此异常
Collection was modified; enumeration operation may not execute
在点击循环之前,我无法获取完整的文件列表,因为计时器操作会在循环运行时将文件添加到列表中。我怎样才能解决这个问题。请指教。
你必须建立某种锁定。
private object _locker = new object(); // Class member object
void ProcessList() // Or whatever it's called
{
lock (_locker)
{
foreach (string pfile in mylist)
{
//dostuff
}
}
}
确保使用相同的_locker
对象将其他线程的 add 活动也包装在lock
中。
如果//dostuff
代码需要很长时间,您可能需要考虑对列表的副本进行操作,以最大程度地减少列表锁定的时间:
string[] mylistCopy;
lock (_locker)
{
mylistCopy = mylist.ToArray();
}
foreach (string pfile in mylistCopy)
{
//dostuff
}