将计时器与C#中的fileSystemWatcher一起使用

时间:2018-10-31 13:31:29

标签: c# .net reset filesystemwatcher system.timers.timer

这种情况是,我有一个根文件夹来监视任何新文件夹(包含文件),并设置一个计时器以分别压缩每个文件夹。但是,在调用zip函数之前,我无法确定该文件夹中的文件是否为最后一个文件,因此,只要在压缩该文件夹之前创建了新文件,我都想将计时器重置为该文件夹。

我使用nodejs来监视根文件夹及其子文件夹。

  1. 我不确定如何在OnTimedEvent方法中创建另一个监视程序来监视文件的创建。
  2. 一旦检测到该文件夹​​的文件,我不知道如何重置计时器。我认为还可以在OnTimedEvent中编写代码以对其进行重置。

下面是我尝试的代码的一部分,可以在here中找到源代码。任何帮助将不胜感激。

FileSystemWatcher

3 个答案:

答案 0 :(得分:1)

这里有一个简单的扩展方法可以重置给定的计时器。

  public static void Reset(this Timer timer)
    {
      timer.Stop();
      timer.Start();
    }

要从事件内部获取计时器对象,您需要将sender强制转换为System.Timers.Timer()或仅在静态上下文中使用计时器。

答案 1 :(得分:1)

有一个非常聪明的库,名为Reactive Extensions,最初由Microsoft编写为“ Rx”,但现在放置在“ System.Reactive”命名空间中。它使您可以非常简单地编写复杂的事件驱动代码。

例如,在您描述的场景中,您可以对FileSystemWatcher的事件进行“反应”并使用反应性的“油门”,这意味着您只会收到事件的通知在没有发生该事件的一段时间后。您还可以将多个不同的事件合并在一起。将这两个功能放在一起,然后订阅您的方法。

如果这听起来像是一个可行的解决方案,您可能想看看Intro to Rx,这是一个与解决该问题的方法有关的问题,其中包括在各种答案中进行此操作的约4种方法:Wrap a file watcher in reactive extensions(这不是该问题的重复,因为您正在询问计时器,我建议您可能要使用反应性扩展)。

答案 2 :(得分:0)

我有点用lambda表达式解决此问题,因为将计时器和观察程序“绑定”在一起,这就是我发现与此post类似的地方。