Вопрос по c#, filesystemwatcher, .net, exception-handling – Как лучше восстанавливаться после ошибки FileSystemWatcher?

6

ПослеFileSystemWatcher.Error событие было возбуждено, я понятия не имею, что делать дальше. Исключение может быть [относительно] второстепенным, например

too many changes at once in directory

что не влияет на процесс наблюдения наблюдателя, но это также может быть большой проблемой, такой как удаление отслеживаемого каталога, и в этом случае наблюдатель больше не функционирует.

Мой вопрос: как лучше всего обработать событие Error?

Или проверьте наличие файлов в событии, которое происходит до того, как оно будет нарисовано & amp; отображается на экране. Хорошо работает для контекстного меню. (править: Звучит мило, Ниссим, поделитесь?: P) negligible
@saj Чтоuse ? PreguntonCojoneroCabrón
Я намереваюсь поделиться этим, как только я закончу закрывать все края. я буду держать вас в курсе Nissim
Я использую модифицированный FileSystemWatcher, который решает большинство проблем надежности исходного наблюдателя [проблемы переполнения, дублированные события и просмотр сетевого пути] Nissim
Прекратите использовать FileSystemWatcher, это ненадежный сервис записи опросов. saj

Ваш Ответ

2   ответа
1

а затем решил для каждой ошибки, что делать (перезапуск или сбой).

Так

myWatcher.Error += new ErrorEventHandler(OnError);

Следовать

private static void OnError(object source, ErrorEventArgs e)
{
    if (e.GetException().GetType() == typeof(InternalBufferOverflowException))
    {
        //  This can happen if Windows is reporting many file system events quickly 
        //  and internal buffer of the  FileSystemWatcher is not large enough to handle this
        //  rate of events. The InternalBufferOverflowException error informs the application
        //  that some of the file system events are being lost.
        Console.WriteLine(("The file system watcher experienced an internal buffer overflow: " + e.GetException().Message));
    }
}
Я на самом деле решил все проблемы переполнения с помощью очереди блокировки Nissim
2

If it is too much data because the buffer was overrun (many changes) do a list directory and grab the changes you're after. If it is too much data because you're not processing the FileSystemWatcher events quickly enough, ensure you're processing it efficiently. Deleted directory, can't do anything about it other than disposing the FileSystemWatcher, or maybe watching the parent for a recreation of that directory name again.

Похожие вопросы