VB - 每半小时将一个计时器设置为一个Windows服务

时间:2015-04-10 09:26:43

标签: vb.net windows visual-studio-2012 windows-services

我能够使用一个每30分钟执行一次功能的计时器来构建一个Windows服务。

我想让这个功能每半小时执行一次,例如。 00:00,00:30,01:00。

现在可以这样做,但我必须在14:00开始服务,所以它遵循这种模式(每30分钟)。

我想自动化这个,所以如果我开始服务14:08它仍然会在14:30而不是14:38执行。

额外信息: 这是我用于计时器的功能

oTimer = New Timer()
oTimer.Interval = 900000
AddHandler oTimer.Elapsed, AddressOf OnTimer

1 个答案:

答案 0 :(得分:0)

我建议使用Windows计划任务或定时调度库,如Quartz.Net。这说明这个要求很简单,你可以自己快速建立这个。

计时器有适当的时间。这是第一次打勾所需的时间。之后将使用间隔时间。将到期时间设置为现在和下一次执行之间的差异(在您的情况下为TimeSpan.FromMinutes(30 - 08))。

您还可以使用循环:

CancellationToken ct = ...; //Signal this token when you want to shut down the service

while (true) {
 var nextDueTime = CalculateDueTime();
 var delay = nextDueTime - DateTime.UtcNow;

 try {
  await Task.Delay(delay, ct);
 }
 catch (OperationCancelledException) {
  break;
 }

 DoWork(ct);
}

循环解决方案很有吸引力,因为它避免了典型的计时器问题,例如在计时器停止后到来的并发滴答和滴答。