Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NETMF TimerCallback具有不同的时间跨度?_C#_Timer_Timespan - Fatal编程技术网

C# .NETMF TimerCallback具有不同的时间跨度?

C# .NETMF TimerCallback具有不同的时间跨度?,c#,timer,timespan,C#,Timer,Timespan,我试图让计时器每天触发两次,而不是一个稳定的时间跨度。 我想在07:00和16:00触发回调,然后在第二天07:00重复 出于某种原因,我没有意识到这一点,这似乎并不难,但我在想,我必须每天建立一个新的计时器,并在一天结束时关闭它?为什么不让计时器每小时滴答一次,然后只在7:00和16:00响应事件 var timer = new Timer(TimeSpan.FromHours(1).TotalMilliseconds); timer.Elapsed += TimerHandler; voi

我试图让计时器每天触发两次,而不是一个稳定的时间跨度。 我想在07:00和16:00触发回调,然后在第二天07:00重复


出于某种原因,我没有意识到这一点,这似乎并不难,但我在想,我必须每天建立一个新的计时器,并在一天结束时关闭它?

为什么不让计时器每小时滴答一次,然后只在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;
  }
  ...
}

如果必须执行所需的功能,最好每小时触发一次,并检查回调。当以后您决定更改时间,甚至更改每天触发器的数量时,可以在一个位置执行,而无需重新创建计时器


例如,将一个列表传递给timer(extended)类,该类记录真正做某事的时间,并每小时检查一次该列表。

您真的需要使用长时间运行的计时器来实现这一点吗?如果您正在等待执行特定任务,那么最好编写一个控制台应用程序来执行您需要的任何操作。然后,您可以设置一个计划任务,以便在需要时运行应用程序;请参阅。

基于此线程中的信息,我决定为NETMF编写一个“调度程序”库。它在实现上类似于计时器模式,但基于TimeDate来指定事件


您可以通过

是的。基本上,海报不需要计时器,而是需要一个可以在mroe业务级别的时间表上工作的调度器-这不在.NET框架中。因此,一个常规的计时器+逻辑可以工作,或者像quartz.net这样的调度框架。是的,调度器是描述事情的更好方法。这是在.NETMF(Netduino)中,所以我将考虑使用我自己的(用回调对象在时间戳上键入的哈希表似乎合理)足够公平-在这种情况下,我要么接受JaredPar的建议,要么计算距离下一次需要运行的时间有多长,并将超时设置为该持续时间。我应该在主线程中提到,不是在评论中,而是.NETMF(Netduino)