我在控制台服务应用程序中使用System.Threading.Timer,并尝试每天在同一时间制作计时器。
如果我之前启动应用程序,最初我很好。就像我的时间是10:05并且我在10:00开始应用程序一样,我们很好。但如果我从10:06开始,我不知道如何告诉时间跨度提前24小时。
感谢您的帮助!
public void SetUpTimer(TimeSpan alertTime)
{
DateTime current = DateTime.Now;
TimeSpan timeToGo = alertTime - current.TimeOfDay;
if (timeToGo < TimeSpan.Zero)
{
EventLog.WriteEntry("MyApp", "Timer Passed " );
return;//time already passed
}
timer = new System.Threading.Timer(x =>
{
EventLog.WriteEntry("MhyApp", "Timer Set " + timeToGo);
this.MethodRunsAt();
}, null, timeToGo, System.Threading.Timeout.InfiniteTimeSpan);
}
答案 0 :(得分:1)
我建议你使用cron表达式来解决这个问题。例如,您可以使用Quartz.Net库(可通过nuget获得)。
你的cron表达式如下所示:
0 10 * * * //“At 10:00”
它告诉我们每天都会在“10:00”准确地执行操作。或者,如果你想,你甚至可以在每个星期一和星期三开始它:
0 10 * * 1,3 //“At 10:00 on Monday and Wednesday.”
或者如果你想在某个时间范围内定期:
0/2 10 * * 1,3 //“At every 2nd minute from 0 through 59 past hour 10 on Monday and Wednesday.”
答案 1 :(得分:0)
这是一种方法:
IApplicationBuilder