FileSystemWatcher を使用して、イベントが発生した後にイベント リスナーのインスタンスを破棄する方法はありますか?
私のプログラムは基本的に、新しく作成されたフォルダーでの batch.complete.xml ファイルの作成をリッスンします。プログラムがファイルが作成されたことを検出すると、このフォルダーでリッスンを続行する必要はありません。
私のプログラムは次のようになります。
public static void watchxmlfile(batchfolderpath){
var deliverycompletewatcher = new FileSystemWatcher();
deliverycompletewatcher.Path = batchfolderpath;
deliverycompletewatcher.Filter = "*.xml";
deliverycompletewatcher.Created += new FileSystemEventHandler(OnChanged);
deliverycompletewatcher.EnableRaisingEvents = true;
}
private static void OnChanged(object sender, FileSystemEventArgs e)
{
BuildingestionXml(string.Format(@"{0}\{1}",e.FullPath,e.Name));
Console.WriteLine(@"Second: Success sending{0}\{1}", e.FullPath, e.Name);
}
したがって、上記のイベントが発生すると、新しいパスを持つ watchxmlfile() が明示的に呼び出されない限り、「batchfolderpath」でイベントを監視する必要がなくなります。
上記のイベントのリスナーのインスタンスが多すぎることによるメモリ リークを防止しようとしています。