如果出现异常,Windows服务将停止

时间:2012-09-12 13:42:00

标签: visual-studio-2010 c#-4.0 timer

我开发了使用System.Threading.Timer的Windows服务。定时器每x分钟启动一次,工作正常(定时器在方法结束时更新)。但是,如果尝试阻止服务中出现错误,尽管我更新计时器并告诉他何时再次启动,但只是停止了 为什么会这样?这是代码:

 System.Threading.Timer serviceTimer;

 protected override void OnStart(string[] args)
 {
     TimeSpan diff;
     diff = nextRun - now;
     TimerCallback timerDelegate =
         new TimerCallback(MyTimerCallback);
     serviceTimer = new System.Threading.Timer(timerDelegate, null, 
         diff, new TimeSpan(-1));
 }

 public  void MyTimerCallback(object something)
 {   
    try
    {
        //possible error that happened
    }
    catch(Exception)
    {

    }
    finally
    {
        //diff is a new variable telling timer when to start again 
        serviceTimer.Change(diff, new TimeSpan(-1));
    }
 }

我错过了什么,如果出现错误,服务会停止?

2 个答案:

答案 0 :(得分:0)

也许计时器无法改变。 Timer.Change返回一个布尔值:

  如果计时器成功更新,则

true ;否则, false

但你没有检查那个结果。我建议每次都可以处理定时器和new一个新的定时器,因为它已经被触发并且你把它创建为“一次性”定时器,例如。

finally
{
    serviceTimer.Dispose();
    serviceTimer = new System.Threading.Timer(timerDelegate, null, 
     diff, new TimeSpan(-1));
}

答案 1 :(得分:0)

如果有人处理同样的问题我会想到这样的事情:

因为我希望我的服务无论如何都能保持活力: 我正在向服务经理报告该服务已成功启动 -

 base.OnStart(args);

在配置中,您可以将legacyUnhandledExceptionPolicy设置为true(1)