C#,System.Timers.Timer,运行在同步每次15min与系统时钟(C#, Syste

2019-07-29 18:01发布

我如何获得System.Timers.Timer触发事件经过的同步,每15分钟与系统时钟? 换句话说,我希望它正好在XX触发:00,XX:15,XX:30,XX:45(其中xx指任何小时)

Answer 1:

你可以让它过去每一秒,并检查当前时间是否是00,15,30或45,然后才将事件转发。

第一个想法是:

private static System.Timers.Timer aTimer;
private static System.DateTime _last;

public static void Main()
{
    aTimer = new System.Timers.Timer(10000);

    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

    aTimer.Interval = 1000;
    aTimer.Enabled = true;

    Console.WriteLine("Press the Enter key to exit the program.");
    Console.ReadLine();
}

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    DateTime time = 
        new DateTime( 1,1,1, DateTime.Now.Hours, DateTime.Now.Minute );

    if( time.Minute==0 ||time.Minute==15 || time.Minute==30 || time.Minute==45 )
    {
        // Avoid multiple notifications for the same quarter.
        if ( _last==DateTime.MinValue || _last!=time )
        {
            _last = time;

            // Do further processing.
            doProcessing();
        }
    }
}

(基于实施例此MSDN文档 )



Answer 2:

当开始该程序,或者改变事件时间将被触发,加载事件时间到内存(以保持从硬盘驱动器的每个第二读取该数据。)然后,设置一个定时器火每隔1秒。 集火每隔1秒计时器是在处理器上非常小的开销。 设置一个开放的任务管理器,你甚至不会注意到运行比定时器正在运行之前任何更多的处理器。 然后把支票在计时器事件,以检查是否是时候触发一个事件。



Answer 3:

使用Quartz.net。 然后你可以使用正则表达式来定义的时间间隔。



文章来源: C#, System.Timers.Timer, run every 15min in sync with system clock