【问题标题】:C#, System.Timers.Timer, run every 15min in sync with system clockC#,System.Timers.Timer,每 15 分钟运行一次,与系统时钟同步
【发布时间】:2012-06-09 10:12:21
【问题描述】:

如何让 System.Timers.Timer 每 15 分钟触发一次 Elapsed 事件,与系统时钟同步?换句话说,我希望它恰好在 xx:00、xx:15、xx:30、xx:45 触发(其中 xx 表示任何时间)

【问题讨论】:

  • 你可以让它每秒过去一次,检查当前时间是00、15、30还是45,然后才转发事件。
  • 'exactly' 不太可能由于其他系统活动...
  • @MitchWheat - 考虑到我们拥有的许多工具(而且与微秒无关),“不可能”不太可能。
  • 首先将定时器的超时值设置为毫秒,相当于15分钟。然后检查系统时钟是否给出 mm(分钟)值,如 00、15、30 或 45。如果为 TRUE,则启动计时器。计时器将在以后的每个时间间隔内自动触发 Timer.Elapsed 函数。当然,这只是一个想法。
  • 确保将 AutoReset 属性设置为 false。并且每次从 DateTime.Now 重新计算下一个间隔,这样它就保持准确。

标签: c# timer system sync clock


【解决方案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();
        }
    }
}

(示例基于this MSDN documentation)

【讨论】:

    【解决方案2】:

    在启动程序或更改将触发的事件时间时,将事件时间加载到内存中(以防止每秒从硬盘读取此数据。)然后设置一个计时器以每 1 秒触发一次。设置为每 1 秒触发一次的计时器对处理器的开销很小。设置一个并打开任务管理器,您甚至不会注意到处理器在运行,而不是在计时器运行之前。然后检查计时器事件以检查是否到了触发事件的时间。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-09
        • 2020-03-22
        • 1970-01-01
        • 2022-08-18
        • 2015-05-03
        相关资源
        最近更新 更多