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

この例外が、ロードされたデータをループしている場所と関係があるとは思いません。ここに表示されていない関連するものに違いありません。

チェックリスト:

  • この動作は何回発生しましたか?
  • のイベントを処理しAddingNewたり、そこからファイルにアクセスしたりしますか?ListChangedBindingList
  • 表示したメソッドに対して複数の同時呼び出しがありますか?
于 2013-02-19T13:26:13.360 に答える