use*_*912 1 c# filesystemwatcher
使用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);
}
Run Code Online (Sandbox Code Playgroud)
因此,当上述事件被触发时,我不再需要在"batchfolderpath"中监视事件,除非显式调用watchxmlfile(),它将具有新路径.
我试图防止上述事件的过多侦听器实例的内存泄漏.
在你身上EventHandler你可以取消分配事件,但你必须将其声明FileSystemWatcher为变量.
例
private static FileSystemWatcher deliverycompletewatcher;
public static void watchxmlfile(string batchfolderpath)
{
deliverycompletewatcher = new FileSystemWatcher();
deliverycompletewatcher.Path = batchfolderpath;
deliverycompletewatcher.Filter = "*.xml";
deliverycompletewatcher.Created += OnChanged;
deliverycompletewatcher.EnableRaisingEvents = true;
}
private static void OnChanged(object sender, FileSystemEventArgs e)
{
deliverycompletewatcher.EnableRaisingEvents = false;
deliverycompletewatcher.Created -= OnChanged;
// Do some cool stuff
}
Run Code Online (Sandbox Code Playgroud)
您不需要分配变量,sender是 FileSystemWatcher:
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);
((FileSystemWatcher)sender).Dispose();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4912 次 |
| 最近记录: |