日期:2014-05-17  浏览次数:21667 次

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&n