将元素从一个列表添加到另一个列表时发生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);
}

不再抛出异常,但我不明白问题出在哪里…ReificableDroidsBindingList<Type>类型的属性。

此外,如果我在using语句中保留foreach循环,并将类型名称打印到控制台,如下所示:

foreach (Type droidType in tmpList)
{
    Console.WriteLine(droidType.GetType().ToString());
}

也没有抛出异常。

有人知道是什么原因导致在using语句中引发此异常吗?

将元素从一个列表添加到另一个列表时发生IOException

我看不出这个异常与您在加载数据上循环的位置有任何关系。它一定是相关的东西,这里没有显示。

检查清单:

  • 这种行为发生了多少次
  • 您是否处理BindingListAddingNewListChanged事件,并可能从那里再次访问该文件
  • 您对所显示的方法有多个并发调用吗