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