我做了一个看起来像这样的计时器功能:
[[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]]
我注意到我的触发器在启动应用程序后仅运行一天,并且该应用程序在服务器上全天候运行,因此它永远不会关闭。我需要它来运行一周中的每一天,有些想法可以解决这个问题吗?
答案 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));
这是一项异步任务。它不会阻止你的其他代码,它每秒只运行一次,但它每次运行。