0

尝试将从二进制文件读取的元素添加到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.

我的理解是该文件需要关闭,所以我将foreach循环从using语句中取出,如下所示:

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是 type 的属性BindingList<Type>

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

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

也没有抛出异常。

有谁知道什么可能导致在 using 语句中引发此异常?

4

1 回答 1

1

我看不出这个异常可能与您循环加载数据的地方有关。它一定是相关的,这里没有显示。

清单:

  • 这种行为发生了多少次?
  • 您是否处理AddingNewListChanged再次BindingList从那里访问文件?
  • 您是否对显示的方法有多个并发调用?
于 2013-02-19T13:26:13.360 回答