【问题标题】:filesystemwatcher check last detectionfilesystemwatcher 检查最后一次检测
【发布时间】:2014-11-18 15:38:15
【问题描述】:

我正在使用 FileSystemWatcher 监视 .net 中的文件夹,并且正在触发 Created、Changed 和 Renamed 事件。

在创建和重命名事件中,NotifyFilterNotifyFilters.FileName 在 Changed 事件中,它设置为 NotifyFilters.LastWrite

现在.. 如果最后一次触发超过 1 秒,我不想触发这些事件。所以每次射击都必须延迟1秒。这也意味着它可以跳过在此延迟之间更改/重命名/创建的文件。只是在延迟时不要做任何事情。

我搜索并尝试了很多,但我无法解决。

【问题讨论】:

  • err.. 请说明您遇到的问题;提供失败代码的代码示例。尽管存在误解,SO 不是一个教程站点,也不是一个您可以请求其他人为您执行功能请求和实现的社区。请花点时间查看委托、事件和事件处理的基础
  • 我不知道如何获取上次触发文件的时间并延迟一秒。我的代码是一个带有 3 个事件的简单文件系统观察器。
  • 正如@DWRoelands 在下面指出的那样,如果您的标准/条件是时间,那么您需要两个时间点进行比较。 DateTime.Now() 和您自己的变量,如果您设置的条件满足(真),您将分配给 DateTime.Now().AddSeconds(+1)。这并不能回答您的全部问题,因为您希望阻止事件触发......这就是 OOP 的用武之地以及您对委托、事件、EventArgs 和 EventHandling 的理解。 do stuff 应该是你自己的事件,你的类要接受。

标签: c# .net vb.net filesystemwatcher


【解决方案1】:

创建一个时间戳,表示处理事件的下一个有效时间。然后,在事件处理程序中,对照该时间检查当前时间。

Public Class MyClass
    Dim NextValidTime as DateTime

    public sub Some_Event_Handler()
        If Now() > NextValidtime Then
            'do stuff
            NextValidTime = DateAdd(DateInterval.Second, 1, Now)
        Else
            ' Not enough time has passed - do nothing
        End If
    end sub
End Class

【讨论】:

  • 我在上面的 cmets 中说明了这一点,但 OP 不打算根据这些条件引发事件。所以do stuff 将是一个引发事件声明,在您的示例中的 eventArg 声明here .
  • 这正是我想要的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 2017-01-16
  • 2011-08-30
  • 1970-01-01
相关资源
最近更新 更多