定时器/触发器只能工作一天C#

时间:2017-04-16 20:57:01

标签: c# timer triggers method-chaining

我做了一个看起来像这样的计时器功能:

[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1],
 [4, 5, 6], [4, 6, 5], [5, 4, 6], [5, 6, 4], [6, 4, 5], [6, 5, 4],
 [7, 8, 9], [7, 9, 8], [8, 7, 9], [8, 9, 7], [9, 7, 8], [9, 8, 7]]

我注意到我的触发器在启动应用程序后仅运行一天,并且该应用程序在服务器上全天候运行,因此它永远不会关闭。我需要它来运行一周中的每一天,有些想法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您为Timer构造函数提供的最后一个参数是Timeout.InfiniteTimeSpan - 但是检查documentation参数是:

public Timer(
  TimerCallback callback,
  object state,
  TimeSpan dueTime,
  TimeSpan period
) 

即。最后一个参数应该是重复周期。 因为你提供了一个无限期,所以计时器永远不会再次触发。

如果这是每天,它应该像TimeSpan.FromHours(24.0)。

答案 1 :(得分:1)

您可以使用以下代码段而不是计时器:

 public static async Task FireTrigger(int hours, int minutes, int seconds)
    {
        do
        {
            if (DateTime.Now.Hour == hours && DateTime.Now.Minute == minutes && DateTime.Now.Second == seconds)
            {
                // Call trigger!

            }
            await Task.Delay(990);
        }
        while (true);
    } 

你可以这样称呼:

 Task.Run(async () => await FireTrigger(hours, minutes, seconds)); 

这是一项异步任务。它不会阻止你的其他代码,它每秒只运行一次,但它每次运行。