FileSystemWatcher прекращает вызывать события по истечении определенного периода времени - PullRequest
3 голосов
/ 13 июля 2011

Мы создали оконный сервис, который прослушивает папки с FileSystemWatcher, при создании мы обрабатываем файл и так далее. Но через пару дней событие перестает работать.

  • Возможно ли, что он собирается сборщиком мусора (GC)?
  • Собирает ли сборщик мусора удерживающий класс (который является одиночным)?
  • Должен ли я использовать слабое событие?
  • У меня есть ошибка, которая означает, что событие становится незарегистрированным?

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

1 Ответ

0 голосов
/ 13 июля 2011

Несколько вещей, чтобы попробовать, как предложено здесь :

  • В обработчике тиковых событий таймера остановите таймер перед выполнением обработки тиковых событий и перезапустите его перед выходом из обработчика
  • Оберните ваш код таймера в блок try / catch, чтобы увидеть, что происходит.
  • Читать Событие Elapsed класса System.Timers.Timer не возникает в службе Windows Описание / исправление ошибки и посмотреть, поможет ли это вам.

В итоге:

protected virtual void TimerTick(object sender, EventArgs e)
{
    // stop your timer
    this.timer.Stop();

    try
    {
        // TODO: add event handler specifics
    }
    catch
    {
        // TODO: add some logging to help you see what's going on
    }        

    // restart your timer
    this.timer.Start();
}
...