.NETMF定时器回调函数如何使用不同的TimeSpans?

3
我正在尝试让一个计时器每天触发两次,而不是一个固定的时间间隔。 我想在早上7点和下午4点触发回调函数,然后第二天早上7点重复。 出于某种原因,这似乎并不难,但我认为我必须每天构建一个新的计时器,并在一天结束时终止它?
4个回答

4
为什么不只设置一个每小时触发一次的计时器,然后只响应7:00和16:00的事件呢?
var timer = new Timer(TimeSpan.FromHours(1).TotalMilliseconds);
timer.Elapsed += TimerHandler;

void TimerHandler(object sender, EventArgs e) {
  var hour = DateTime.Now.Hour;
  if (hour != 7 && hour != 16) {
    return;
  }
  ...
}

是的。基本上,海报不想要一个计时器,而是想要一个可以在更高级别的业务计划中工作的调度程序 - 这不在.NET框架中。因此,常规计时器+逻辑可行,或者使用像quartz.net这样的调度框架。 - TomTom
是的,调度程序是更好的描述方式。这是在.NETMF(Netduino)中,所以我将研究自己的实现(使用时间戳作为键的哈希表和回调对象似乎是合理的)。 - TomCDona
好的,那么我要么采用JaredPar的建议,要么计算距离下一次需要运行的时间有多长,并将超时设置为该持续时间。 - Ade Stringer

1

我应该在主线程中提到,而不是在评论中,它是.NETMF(Netduino)。 - TomCDona

0
根据这个帖子中的信息,我决定为NETMF编写一个“调度程序”库。它的实现类似于计时器模式,但是基于TimeDate来指定事件。
你可以在https://github.com/pelogical/mfschedule获取该库。

0
也许每小时触发它并在回调中检查是否需要执行所需的功能是个好主意。当您稍后决定更改时间甚至更改每天的触发次数时,可以在一个位置完成而无需重新创建计时器。
例如,将列表传递给计时器(扩展)类,该列表保留何时真正执行某些操作的时间,并每小时检查此列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接