可变时间后的火法

时间:2016-03-17 14:18:55

标签: c# windows-services

我正在c#中构建一个警报服务(Windows服务)。此服务将启动并执行一些api调用。根据我从调用获得的结果和适用于该用户的设置,其他方法将在x个时间后触发。这一直持续到用户停止服务为止。

调用方法之间的时间可以是变量。所以在启动后第一次方法调用可以在1分钟之后,之后下一次调用可以在5分钟之后,之后的调用可以在10分钟之后。一切都取决于我从API获得的响应。

我一直在研究system.timers,但我找到的每个例子都有一个固定的时间事件发生,因此不适合我的需要。

2 个答案:

答案 0 :(得分:2)

全局定义时间变量,并在每次响应后重置间隔时间

FYI

  

1分钟= 60000所以10分钟aTimer.Interval = 60000 * 10;

像这样使用

    //defined globally
    System.Timers.Timer aTimer = new System.Timers.Timer();
    aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
     //api call goes here 
    aTimer.Interval=5000; // here you can define the time or reset it after each api call
    aTimer.Enabled=true;

答案 1 :(得分:1)

使用一次性计时器,并在每次通话后重置。我通常使用System.Threading.Timer

// When you first create the timer, set it for the initial time
Timer MyTimer = new Timer(TimerCallbackFunction, null, 60000, Timeout.Infinite);

将句点设置为Timeout.Infinite会阻止计时器多次勾选。它只需勾选一次,然后无限期地等待,或直到你重新启动它。

在你的计时器回调中,做任何需要做的事情,然后重置计时器:

void TimerCallbackFunction(object state)
{
    // Here, do whatever you need to do.
    // Then set the timer for the next interval.
    MyTimer.Change(newTimeoutValue, Timeout.Infinite);
}

这可以防止多个并发回调(如果你的超时值太短),并且还允许你指定下一个滴答的时间。