【问题标题】:Windows service timer issueWindows 服务计时器问题
【发布时间】:2019-09-19 09:14:30
【问题描述】:

我开发了 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.在之前禁用计时器并在之后启用计时器... 2. 添加一些布尔变量并检查并设置之前和之后设置...您尝试过那些明显的解决方案吗?
  • 我已经尝试了第二个选项添加 booll var 来检查,但你能解释一下之前和之后设置的计时器吗
  • time.Enabled = falsefoldermovinglogic() 之前并在之后返回 true?
  • 谢谢它解决了我的问题。

标签: c# windows service


【解决方案1】:

您使事情变得过于复杂,.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    相关资源
    最近更新 更多