停止C#Windows服务TimerCallBack

时间:2013-11-25 13:54:54

标签: c#-4.0

我的要求是,Windows服务需要每50秒在服务器上运行一次。 对于Am,使用Onstart()方法中的以下代码

 private Timer stateTimer;
 private TimerCallback timerDelegate;

 timerDelegate = new TimerCallback(StartService);
 stateTimer = new Timer(timerDelegate, null, 0, 50/0.01);

这里StartService是我的方法名称,每50秒调用一次

所以现在服务每50秒运行一次,没关系。 现在应该编写什么代码来停止OnStop()方法中的执行 完全停止。请急需帮助。

1 个答案:

答案 0 :(得分:0)

从您的评论中,我假设您主要对访问回调方法中的Timer对象感兴趣。如果这是你想要的,你应该使用one-argument Timer constructor,因为这个构造函数会将传递给回调方法的state变量设置为Timer对象本身。

因此,您应该初始化计时器并设置dueTimeperiod,如下所示:

stateTimer = new Timer(timerDelegate);
stateTimer.Change(0, 50000);  // for an interval of 50 seconds

然后,在您的计时器回调方法中,您可以像这样访问Timer对象:

void StartService(object state) {
    var myTimer = (Timer)state;
    ...
}

现在,如果你使用这种方法来阻止计时器滴答作响,例如通过在myTimer.Change(Timeout.Infinite, Timeout.Infinite)中调用StartService,将不再调用计时器回调。除非同时运行某个其他线程,否则该服务将无限期地空闲,或者至少在服务被手动停止或系统重新启动之前。在我看来,最好直接调用ServiceBase.Stop方法,而不是让计时器停止滴答。