我的要求是,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()方法中的执行 完全停止。请急需帮助。
答案 0 :(得分:0)
从您的评论中,我假设您主要对访问回调方法中的Timer
对象感兴趣。如果这是你想要的,你应该使用one-argument Timer constructor,因为这个构造函数会将传递给回调方法的state
变量设置为Timer
对象本身。
因此,您应该初始化计时器并设置dueTime
和period
,如下所示:
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方法,而不是让计时器停止滴答。