运行 任务计划程序每天两次但不是每小时一次
Run the task scheduler twice a day but not hourly intervals
我正在尝试在任务调度程序中启动一项 windows 服务,每天两次 运行,一次在中午 12 点,下一次在同一天晚上 10 点。我希望每天 运行。这可以做到吗?提前致谢
您需要创建 2 个单独的任务。
为了加快速度,您可以在 12:00pm 创建第一个任务 运行。然后只是 export
任务,并立即 import
相同的任务,但名称略有不同。使用 10:00pm
的新时间编辑导入的任务
除非您需要它正好在 12:00,否则您应该通过选中相应的框来编辑触发器以随机化时间。把延迟时间设置成你需要的时间。
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();
}
我不确定这是否是自原始答案以来的新功能,因为这是我第一次想这样做,但在我注意到您可以为任何任务设置多个触发器之前我找到了这个答案.
因此,第一次设置您的任务 运行,然后转到该任务的触发器选项卡,单击新建,并设置您希望该任务的第二次运行.
这比有多个任务要整洁。
我正在尝试在任务调度程序中启动一项 windows 服务,每天两次 运行,一次在中午 12 点,下一次在同一天晚上 10 点。我希望每天 运行。这可以做到吗?提前致谢
您需要创建 2 个单独的任务。
为了加快速度,您可以在 12:00pm 创建第一个任务 运行。然后只是 export
任务,并立即 import
相同的任务,但名称略有不同。使用 10:00pm
除非您需要它正好在 12:00,否则您应该通过选中相应的框来编辑触发器以随机化时间。把延迟时间设置成你需要的时间。
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();
}
我不确定这是否是自原始答案以来的新功能,因为这是我第一次想这样做,但在我注意到您可以为任何任务设置多个触发器之前我找到了这个答案.
因此,第一次设置您的任务 运行,然后转到该任务的触发器选项卡,单击新建,并设置您希望该任务的第二次运行.
这比有多个任务要整洁。