Пара комментариев и предложений ... (которые росли и росли, когда я печатал ... извините)
Событие FileSystemWatcher.Error вызывается, когда FileSystemWatcher получает так много событий, происходящих так быстро, чтоэто не может справиться со всеми ними.Он не срабатывает, когда возникает ошибка при просмотре файловой системы (например, отключение сети).
Я считаю, что у меня была похожая ситуация.Проблема заключается в том, что когда сетевое соединение прерывается, FileSystemWatcher никогда не будет запускать событие, потому что он на самом деле не может видеть то, что он должен наблюдать, но он, кажется, не знает об этом.Когда сетевое соединение возвращается, FileSystemWatcher не восстанавливается, то есть он все еще не может видеть (восстановленное) соединение.Единственное решение, которое мы нашли, которое, казалось, работало надежно, состояло в том, чтобы иметь таймер, который регулярно удалял весь объект FileSystemWatcher и создавал новый, устанавливая все события и папку просмотра и т. Д. Так как удаление и создание нового FileSystemWatcher - это (относительно быстро (т. е. в миллисекундах) вы можете настроить таймер на активацию каждые 10 секунд или около того, не израсходовав слишком много процессора.Конечно, если сеть все еще отсутствует, FileSystemWatcher не сможет видеть сеть независимо от того, что вы делаете.Но ничего страшного, он попытается через 10 секунд.
В этом решении следует обратить внимание на две вещи:
- Когда таймер активируется, он должен проверить, что FileSystemWatcherв настоящее время не обрабатывает какие-либо события, и он должен ждать, если это так.Поэтому в событии таймера остановите Timer, остановите FileSystemWatcher от инициирования событий, затем дождитесь завершения любых событий FileSystemWatcher (использование lock (...) {...} - хороший способ сделать это).
- После удаления и повторного создания FileSystemWatcher вам необходимо вручную проверить любые события, которые могли произойти во время обновления FileSystemWatcher (или когда сеть была отключена).Например, если вы наблюдаете за созданием файлов, и файл создается при обновлении FileSystemWatcher или при отсутствии сетевого подключения, вы не получите события для этих файлов при запуске нового экземпляра FileSystemWatcher (поскольку файлы уже созданы).
Надеюсь, это поможет.