【问题标题】:FileSystemWatcher stops raising events after a period of timeFileSystemWatcher 在一段时间后停止引发事件
【发布时间】:2011-07-12 21:53:29
【问题描述】:

我们已经建立了一个窗口服务来监听带有FileSystemWatcher 的文件夹,创建时我们会处理文件等等。但几天后,该活动停止工作。

  • 是否有可能被垃圾收集器 (GC) 收集?
  • GC 是否收集它持有类(这是一个单例)?
  • 我应该使用弱事件吗?
  • 我是否有一个错误意味着事件被取消注册?

我认为问题在于,FSW 有一个内部缓冲区,当它溢出它的一个错误时,看看这个提供代码来解决这个问题的article
希望这对任何人都有帮助。

【问题讨论】:

  • 这些都是非常模糊的问题,如果没有更多的上下文很难回答。垃圾收集器不会收集任何仍然引用它的东西(在一个本身不可收集的对象中,等等),所以只要你保持对你的单例的引用,你应该没问题。

标签: c# events event-handling garbage-collection filesystemwatcher


【解决方案1】:

按照here 的建议尝试一些事情:

总结:

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();
}

【讨论】:

  • 这正是我在Timer 课程中所做的,但在我们的FileSystemWatcher 中,事件在一段时间后停止响应
  • 看起来您正在使用第三条建议作为您之前帖子的答案:*.com/questions/6166339/…
  • 这个答案与问题有什么关系?问题是关于FileSystemWatcher,答案是关于Timer