Windows服务定点一天只运行一次

如Windows自开发的服务

设置的时间范围为10点,意思为在10-11点之间会运行

再设置循环5分钟运行一次

 

比如说同步某些数据,或者生成某中间xml文件,

如果如上设置,就会在10-11点之间循环运行很多次,导致生成很多重复文件.

其实一般该类服务只需要一天运行一次即可.那怎么控制呢,既能在10-11之间触发一次,但不会重复执行

 

有一种方法是,设置参数,如果当天执行一次,则设置为该参数

下次循环执行的时候比对时间如果为当天则不再运行即可

 

private int m_Hour = 10;
private DateTime m_LastRunDate = DateTime.MinValue;

 

//从后台获取设置的运行时间和循环时间

protected override void OnStart(string[] args)
  {
   try
   {
    ConfigEntryManager configEntryManager = new ConfigEntryManager();
    
    this.RunTimer.Interval = configEntryManager.AutoApproveServiceEntry.RunTimeInterval;
    this.m_Hour = configEntryManager.AutoApproveServiceEntry.ScanHourPerDay;
   }
   catch(Exception ex)
   {
    Const.LogError("Init Run Time Interval exception : " + ex.ToString());
   }
  }

 

//间隔循环,时间不同于上一个时间才会执行

  private void RunTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
  {
   if(DateTime.Now.Date != m_LastRunDate.Date && DateTime.Now.Hour == this.m_Hour)
   {
    Const.LogInfor("Running Auto Aprpove Service. ");
    this.RunTimer.Stop();    
    this.GoApprove(); 
    
    this.RunTimer.Start();   
   }
  }

 

//m_LastRunDate  如果运行一次,则赋值为当天

private void GoApprove()
  {
   try
   {
    Const.LogInfor("Go Approve Start.... : " + DateTime.Now);
    new AutoApprove().AutoApproveForms();

    m_LastRunDate = DateTime.Now;
    
    Const.LogInfor("Go Approve Complete.... : " + DateTime.Now);     
   }
   catch(Exception ex)
   {
    Const.LogError("Go Approve Exception : " + ex.ToString());
   }
  }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值