将元素从一个列表添加到另一个列表时发生IOException
本文关键字:列表 添加 另一个 IOException 一个 元素 | 更新日期: 2023-09-27 18:00:11
当我试图将从二进制文件读取的元素添加到BindingList<Type>
时,遇到了一个奇怪的问题。这是错误的代码:
BindingList<Type> tmpList = null;
using (FileStream serializedListStream = File.OpenRead(_kReificableDroidsListPath))
{
BinaryFormatter serializer = new BinaryFormatter();
//Temporary list so that ListChanged event is fired
//upon adding new types
tmpList = serializer.Deserialize(serializedListStream) as BindingList<Type>;
foreach (Type droidType in tmpList)
{
ReificableDroids.Add(droidType);
}
}
Visual Studio调试器显示此异常:
System.IO.IOException: The process cannot access the file 'C:'Users'Zoneur'documents'visual studio 2012'Projects'Droid TP1'Droid TP2'bin'Debug'reificable_droids_list.bin' because it is being used by another process.
我所理解的是需要关闭文件,所以我从using
语句中取出了foreach
循环,如下所示:
BindingList<Type> tmpList = null;
using (FileStream serializedListStream = File.OpenRead(_kReificableDroidsListPath))
{
BinaryFormatter serializer = new BinaryFormatter();
//Temporary list so that ListChanged event is fired
//upon adding new types
tmpList = serializer.Deserialize(serializedListStream) as BindingList<Type>;
}
foreach (Type droidType in tmpList)
{
ReificableDroids.Add(droidType);
}
不再抛出异常,但我不明白问题出在哪里…ReificableDroids
是BindingList<Type>
类型的属性。
此外,如果我在using
语句中保留foreach
循环,并将类型名称打印到控制台,如下所示:
foreach (Type droidType in tmpList)
{
Console.WriteLine(droidType.GetType().ToString());
}
也没有抛出异常。
有人知道是什么原因导致在using语句中引发此异常吗?
我看不出这个异常与您在加载数据上循环的位置有任何关系。它一定是相关的东西,这里没有显示。
检查清单:
- 这种行为发生了多少次
- 您是否处理
BindingList
的AddingNew
或ListChanged
事件,并可能从那里再次访问该文件 - 您对所显示的方法有多个并发调用吗