События, происходящие несколько раз в OpenNETCF.IO.FileSystemWatcher - PullRequest
2 голосов
/ 13 октября 2010

Всякий раз, когда я подписываюсь на уведомление FileSystemWatcher, происходит много событий, когда я создаю новый файл или изменяю существующий файл. События происходят в следующей последовательности:

Новый файл

Создан

Изменено

Изменено

Изменено

Изменено

Изменено

Изменено

Изменение

Изменено

Удалено

Изменено

Переименовать

Переименован

Удалить

Удалено

Переименовать и Удалить работают как положено. Созданные и Измененные вызываются несколько раз.

Есть ли какое-либо решение / обходной путь для получения точного уведомления при добавлении / изменении файлов?

1 Ответ

3 голосов
/ 13 октября 2010

Если вы посмотрите на исходный код SDF для FSW, вы увидите, что это на самом деле довольно тонкая управляемая оболочка вокруг собственного вызова SHChangeNotifyRegister с dwEventMask, установленной в SHCNE_ALLEVENTS.Дескриптор окна передается в API, который затем получает обратные вызовы, когда происходят изменения, и эти обратные вызовы направляются в управляемые события, которые FSW предоставляет на управляемой стороне.

Теперь, глядя на обратный вызов, похоже, что существует 9Идентификаторы событий, которые являются дескрипторами, четыре из которых вызывают событие Changed:

  • SHCNE_UPDATEDIR
  • SHCNE_RMDIR
  • SHCNE_UPDATEITEM
  • SHCNE_ATTRIBUTES
...