public void RunOnTimer()
{
string timeToRunServ = "15:30"; //Time to run the report
var timeArray = timeToRunServ.Split(';');
CultureInfo provider = CultureInfo.InvariantCulture;
foreach (var strTime in timeArray)
{
//foreach times in the timeArray, add the times into a TimeSpan list
timeToRun.Add(TimeSpan.ParseExact(strTime, "g", provider));
}
timer = new Timer(50000);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
ResetTimer();
}
void ResetTimer()
{
Logs.WriteLog("Reset Timer called");
TimeSpan currentTime = DateTime.Now.TimeOfDay;
TimeSpan? nextRunTime = null;
//foreach time in the timeToRun list
foreach (TimeSpan runTime in timeToRun)
{
if (currentTime < runTime)
{
//If the current time is less than the run time(time has not passed), assgin the run time as the next run time
nextRunTime = runTime;
break;
}
}
if (!nextRunTime.HasValue)
{
nextRunTime = timeToRun[0].Add(new TimeSpan(24, 0, 0));
}
timer.Interval = (nextRunTime.Value - currentTime).TotalMilliseconds;
string interval = timer.Interval.ToString();
Logs.WriteLog("timer interval is set to " + interval);
timer.Enabled = true;
}
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
string day = DateTime.Today.DayOfWeek.ToString();
timer.Enabled = false;
Logs.WriteLog("Timer elapsed");
StartProcess() // Call the task you want to perform here
ResetTimer();
}
3条答案
按热度按时间xbp102n01#
您需要创建两个单独的任务。
为了让这个过程更快一些,你可以创建第一个任务在12:00pm运行。然后只需
export
任务,并立即import
名称略有不同的相同任务。编辑导入的任务,新时间为10:00pm除非你需要它正好在12:00,否则你应该通过选中相应的框来编辑触发器以随机化时间。你可以根据需要设定延迟时间。
vof42yt12#
我不确定这是否是一个新功能,因为这是我第一次想这样做,但我发现这个答案之前,我注意到,你可以设置多个触发器的任何任务。
因此,请设置您的任务第一次运行,然后转到该任务的触发器选项卡,单击新建,并设置您希望该任务第二次运行。
这比有多个任务更整洁。
wooyq4lh3#