Windows mobile OpenNETCF.IO.FileSystemWatcher中多次发生的事件

Windows mobile OpenNETCF.IO.FileSystemWatcher中多次发生的事件,windows-mobile,compact-framework,filesystemwatcher,opennetcf,Windows Mobile,Compact Framework,Filesystemwatcher,Opennetcf,每当我订阅FileSystemWatcher通知时,在创建新文件或更改现有文件时都会发生多个事件。事件按以下顺序发生: 新文件 创造 改变 改变 改变 改变 改变 改变 改变 改变 删除 改变 重命名 改名 删除 删除 重命名和删除按预期工作。多次调用创建和更改 在添加/更改文件时,是否有任何解决方案/解决方法可以获得准确的通知?如果您查看FSW的SDF源代码,您会发现它实际上是一个非常薄的托管垫片,用于本地SHChangeNotifyRegister调用,dwEventMask设置为SHCNE

每当我订阅FileSystemWatcher通知时,在创建新文件或更改现有文件时都会发生多个事件。事件按以下顺序发生:

新文件

创造

改变

改变

改变

改变

改变

改变

改变

改变

删除

改变

重命名

改名

删除

删除

重命名和删除按预期工作。多次调用创建和更改


在添加/更改文件时,是否有任何解决方案/解决方法可以获得准确的通知?

如果您查看FSW的SDF源代码,您会发现它实际上是一个非常薄的托管垫片,用于本地SHChangeNotifyRegister调用,dwEventMask设置为SHCNE_ALLEVENTS。窗口句柄传递给API,API在发生更改时接收回调,这些回调被编组到FSW在托管端公开的托管事件

现在看一下回调,看起来有9个事件ID是句柄,其中四个会引发已更改的事件:

  • SHCNE_更新器
  • SHCNE_RMDIR
  • SHCNE_更新项目
  • SHCNE_属性
因此,当您创建一个新文件时,SHCNE_create将为您提供已创建的事件,然后是引发几个已更改事件的其他回调。更改事件上的所有事件参数是否相同?如果是,则必须使用调试器逐步检查SDF代码,以准确地查看将要执行的操作以及实际的回调

这里的短故事是SDF只是转发操作系统提供给它的事件。您看到所有这些事件的原因是操作系统正在发送它们。它发送它们的确切原因可能是操作系统处理文件的方式,甚至可能是特定于您正在使用的文件系统驱动程序(即,在另一个设备上,它可能略有不同,甚至在同一设备的另一个磁盘上)


我认为解决方法是查看事件args,并为快速连续发生的相同文件名“分组”事件。例如,如果同一文件夹中的同一文件名在一秒钟内发生了一系列更改和创建的事件,那么很可能是文件创建。

您可以发布事件数据吗?有什么不同吗?对于事件?听起来它与桌面版本的gotcha类似:。根据我的经验,我尽可能避免FSW。捕捉事件并确定在一秒钟内发生的重复事件似乎是一个难题。有没有更好的解决办法?