首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

FileSystemWatcher的开启与关闭解决方案

2013-11-11 
FileSystemWatcher的开启与关闭窗体中有ListView、两个按钮、一个fileSystemWatcher我希望通过按钮一启动监

FileSystemWatcher的开启与关闭
窗体中有ListView、两个按钮、一个fileSystemWatcher
我希望通过按钮一启动监视Listview列出的文件变化,

foreach (ListViewItem i in this.listView.Items)
{
      this.fileSystemWatcher = new FileSystemWatcher();
      this.fileSystemWatcher.Path = i.SubItems[2].Text;
      if (i.Group == G1)
      {
           this.fileSystemWatcher.Filter = i.SubItems[0].Text;
           this.fileSystemWatcher.Changed += new FileSystemEventHandler(watcher_Changed);
      }
      else
      {
           this.fileSystemWatcher.Created += new FileSystemEventHandler(watcher_Created);
           this.fileSystemWatcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
           this.fileSystemWatcher.Renamed += new RenamedEventHandler(watcher_Renamed);
      }
      this.fileSystemWatcher.EnableRaisingEvents = true;
}
另外希望通过按钮二停止对ListView列出的文件监视。
{
      this.fileSystemWatcher.EnableRaisingEvents = false;
}
现在出现的问题是按钮二不能清除之前加载的更新,也不能停止对文件的监视,按钮一点几次之后就会发生多次对同一文件监视事件发生。按钮二里面我的代码应该怎么写呢?,达到效果就是停止并清除所有监视 fileSystemWatcher 动态加载监视项
[解决办法]
你用-=将事件处理函数解除就可以了。
[解决办法]
引用:
Quote: 引用:

按钮二应该仍然使用按钮一里的 fileSystemWatcher ,不要重新 new 啊!
麻烦你可不可以复制我那个改一下?我真不知道怎么写?我把前面那个New去了后会有错误。
List<FileSystemWatcher> all = new List<FileSystemWatcher>();
private void button1_Click(object sender, EventArgs e)
{
    foreach (ListViewItem i in this.listView.Items)
    {
        this.fileSystemWatcher = new FileSystemWatcher();
        all.Add(fileSystemWatcher);
        this.fileSystemWatcher.Path = i.SubItems[2].Text;
        if (i.Group == G1)
        {
            this.fileSystemWatcher.Filter = i.SubItems[0].Text;
            this.fileSystemWatcher.Changed += new FileSystemEventHandler(watcher_Changed);
        }
        else
        {
            this.fileSystemWatcher.Created += new FileSystemEventHandler(watcher_Created);
            this.fileSystemWatcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
            this.fileSystemWatcher.Renamed += new RenamedEventHandler(watcher_Renamed);
        }
        this.fileSystemWatcher.EnableRaisingEvents = true;
    }
}

private void button2_Click(object sender, EventArgs e)
{
    foreach (FileSystemWatcher fileSystemWatcher in all)
    {
        fileSystemWatcher.EnableRaisingEvents = false;
        fileSystemWatcher.Dispose();
    }
    all.Clear();
}

热点排行