每隔一分钟运行调度程序计时器

本文关键字:调度程序 计时器 运行 一分钟 | 更新日期: 2023-09-27 18:34:01

以下调度程序每 1 分钟运行一次,从调用其 Start() 方法的时间开始计算...但我真正需要的是它在系统时间的分钟部分的每次更改时滴答作响。知道吗?这是一个Windows应用程序(WPF)。

DispatcherTimer hourTimer = new DispatcherTimer(DispatcherPriority.Normal) 
{ 
    Interval = new TimeSpan(0, 1, 0) 
};
hourTimer.Tick += (sender,e) => { renderTime(); };
hourTimer.Start();

每隔一分钟运行调度程序计时器

您无法从任何使用单个线程执行时钟周期的计时器获得"节拍器质量节拍"。这是因为当需要发生即时报价时,线程可能会被阻塞。

您能做的最好的事情就是计算到下一次逐笔报价的时间,并在逐笔报价事件开始时重置持续时间。

var now = DateTime.UtcNow;
var nextMinute = now.AddTicks(-(now.Ticks%TimeSpan.TicksPerMinute)).AddMinutes(1);
DispatcherTimer hourTimer = new DispatcherTimer(DispatcherPriority.Normal)
{
    Interval = nextMinute - DateTime.UtcNow
};
hourTimer.Tick += (sender, e) =>
{
    var correctionNow = DateTime.UtcNow;
    var timeCorrection = correctionNow.AddTicks(-(correctionNow.Ticks % TimeSpan.TicksPerMinute)).AddMinutes(1);
    hourTimer.Interval = timeCorrection - DateTime.UtcNow;
    renderTime();
};
hourTimer.Start();