如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());
}
}