我如何获得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