Windows服务计时器问题

时间:2019-09-19 09:14:30

标签: c# windows service

我已经开发了Windows应用程序,它将监视源文件夹,如果在源文件夹下找到任何文件夹,则在进程文件夹中执行某些操作后,它将将该文件夹移动到进程文件夹,它将移动那些文件夹的目标文件夹或错误文件夹。 我已将此Windows应用程序转换为Windows服务,并且我使该服务每30秒调用一次,但现在我无法在下次调用该服务之前再次检查以前的过程是否完成(如果尚未完成,如何避免再次调用服务)。 >

我添加了30秒的计时器间隔,但过程可能需要30秒以上(不可预测)。

protected override void OnStart(string[] args)
{
   timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
   timer.Interval = 30000; //5000number in milisecinds  
   timer.Enabled = true;
}
private void OnElapsedTime(object source, ElapsedEventArgs e)
{           
   foldermovinglogic();
}

1 个答案:

答案 0 :(得分:0)

您使事情变得过于复杂,.Net具有内置的FileSystemWatcher,当目录中的内容发生更改时,它将丢弃一个事件,您可以从那里按创建的文件夹进行过滤,并将当前子文件夹与子文件夹进行比较上一次更改,然后对新创建的文件夹执行打算的操作。

适合您的示例:

using System.IO;
  1. 声明FileSystemWatcher
private static FileWatcher yourFileWatcher;
  1. 初始化FileSystemWatcher
yourFileWatcher = new FileSystemWatcher(directory);
yourFileWatcher.Created += new FileSystemEventHandler(OnCreated); 
  1. 在OnCreated中,您必须将现在结构与过去结构进行比较,它必须具有以下格式:
private void FSW_Created(object sender, FileSystemEventArgs e)

查看此tutorial