首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 系统运维 >

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

2012-12-22 
解决C#中FileSystemWatcher类的Changed事件触发多次的问题。fsw new FileSystemWatcher(System.Environme

解决C#中FileSystemWatcher类的Changed事件触发多次的问题。
        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即可。 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里.

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

热点排行