`
andy_ghg
  • 浏览: 290593 次
  • 性别: Icon_minigender_1
  • 来自: 扬州
社区版块
存档分类
最新评论

解决C#中FileSystemWatcher类的Changed事件触发多次的问题。

    博客分类:
  • C#
阅读更多
        fsw = new FileSystemWatcher(System.Environment.CurrentDirectory + "\\conf\\","*.xml");
            fsw.EnableRaisingEvents = true;
            fsw.NotifyFilter = NotifyFilters.LastWrite;
            fsw.Changed += new FileSystemEventHandler(fsw_Changed);



首先设置NotifyFilter为LastWrite,这个就屏蔽了因为杀毒软件等各种外部因素导致Changed事件被触发。



然后设置它的EnableRaisingEvents属性如下:


private void fsw_Changed(object sender,EventArgs e)
        {
            fsw.EnableRaisingEvents = false;
            LoadTreeViewData();
            fsw.EnableRaisingEvents = true;
        }

这样,先设置为false然后处理完文件之后再设置为true即可。
0
0
分享到:
评论
1 楼 doylecnn 2011-04-11  
这个时候另一个*.xml文件发生了改动会如何?
我的解决放按是
1:增加一个list,存放文件列表
2:在change事件处理中,首先比对,该文件是否存在于list中
3:存在于list中,change事件就不管了
4:不存在list中,尝试打开文件,这时候如果文件实际的更改尚未完成,会抛异常
5:抛异常了,将该文件扔到list里去
6:没抛异常,处理该文件的动作(我会再开一个线程去处理,免得处理时间太长,又漏掉其他change事件)
7:开一个线程,while死循环检查list中的文件是否可以打开,如果可以打开了,说明change事件已完成,拿去处理,并从list里挪走即可,否则,继续留在list里.

其他细节自己考虑,比如线程退出啥的

相关推荐

Global site tag (gtag.js) - Google Analytics