这种情况是,我有一个根文件夹来监视任何新文件夹(包含文件),并设置一个计时器以分别压缩每个文件夹。但是,在调用zip函数之前,我无法确定该文件夹中的文件是否为最后一个文件,因此,只要在压缩该文件夹之前创建了新文件,我都想将计时器重置为该文件夹。
我使用nodejs
来监视根文件夹及其子文件夹。
下面是我尝试的代码的一部分,可以在here中找到源代码。任何帮助将不胜感激。
FileSystemWatcher
答案 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类似的地方。