System.Threading.Timer试图每天在同一时间制作计时器

时间:2017-06-08 19:00:21

标签: c# multithreading timer

我在控制台服务应用程序中使用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);
}

2 个答案:

答案 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