当我的应用程序对目录中的文件进行更改时,有没有人有任何想法如何可靠地禁用FileSystemWatcher对象,以便我只关注对目录的外部更改?
我已经尝试在执行写操作之前立即将EnableRaisingEvents设置为false,然后立即将其设置回true,但似乎这种方法不可靠,偶尔我仍然会触发事件.
我能想到的唯一另一件事就是在执行写操作后等待一小段时间让操作系统在重新启用FSW之前完成目录的修改,但这似乎是hackish,我不喜欢它.
要添加问题,该目录可能包含许多文件,其身份超出了我的知识和控制范围,所以我不能等待事件触发特定文件然后忽略它.一次修改后可能会触发任意数量的FSW事件(因为可能有许多文件被更新).
解决方法
您无法使用.NET API执行此操作.
正如多个用户指出的那样,您可能最好保留一个更改列表,并从您观察到的变更集中减去它们.
您还可以使用Win32级别的API,如果我没有弄错的话,它为您提供了进行更改的过程的PID(不确定这一点,我已经编写了一个驱动程序,之前在内核空间中执行此操作(以及更多) ).
更新:我在这个项目的团队中打电话给某人,他们确认我们只在内核空间中拥有PID.