ディレクトリに自分のファイルのリストが表示され、コンソールに名前が表示されます。ディレクトリに新しいファイルを追加します(ディレクトリはFileSystemWatcher
によって監視されます)。その名前ですが、例外をスローします:コレクションが変更されました。列挙操作は実行されません。。 反復中にウォッチャーを使用してリアルタイムでリストに追加する
この
はコードです:private static void Main(string[] args)
{
var myfiles = new List<string>();
myfiles = Directory.GetFiles(@"c:\items").ToList();
foreach (var file in myfiles)
{
Console.WriteLine(file);
}
}
public static void Run(List<string> myfiles)
{
var watcher = new FileSystemWatcher { Path = @"c:\items" };
watcher.Created += (source, e) =>
{
myfiles.Add(e.FullPath);
};
watcher.EnableRaisingEvents = true;
}
Q:どのように私は、リストを反復処理していながらウォッチャーを使用してリストに項目を追加することができますか?イテレーション中にRealTimeのリストに項目を追加する方法はありますか?
注:デバッガでは、ウォッチャーがアイテムを適切に追加するのを見ましたが、アイテムが追加された後、例外がスローされます。
注:2番目のスレッドも作成し、ウォッチャーをその中に入れました。
であることをあなたが最終的な結果希望ですか?私は、あなたが(1)コンソールアプリケーションがアプリケーションを起動するときにフォルダ内のすべてのファイルをリストしたいと仮定しています。 (2)フォルダに追加された新しいファイルをコンソールに表示しますか? –
これは、エラーの原因ではありません。同じスレッドでループ内からリストを修正しようとすると、*同じ*エラーが発生します。実際、FSWは別のスレッドを使用していません。 –
同意すると、どのスレッドがリストに追加しようとしても問題はありません。つまり、反復しながらリストに追加することはできません。 –