【问题标题】:How to dispose of event listeners from FileSystemWatcher events如何从 FileSystemWatcher 事件中处理事件侦听器
【发布时间】:2013-01-11 08:33:35
【问题描述】:

使用 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);
}

因此,当上述事件被触发时,我不再需要监视“batchfolderpath”中的事件,除非显式调用 watchxmlfile(),它将有一个新路径。

我正在尝试防止上述事件的太多侦听器实例导致内存泄漏。

【问题讨论】:

标签: c# filesystemwatcher


【解决方案1】:

您不需要分配变量,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();
}

【讨论】:

    【解决方案2】:

    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
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 2020-09-06
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      相关资源
      最近更新 更多