我有一个带有计时器(System.Timers.Timer
)的.NET Windows服务(.NET 3.5)。 OnElapsed
方法如下所示:
private void OnTimerElapsed(object source, ElapsedEventArgs e)
{
lock (this)
{
timer.Stop();
//process some stuff here..
ProcessStuff();
timer.Interval = GetTimerInterval();
timer.Start();
}
}
它工作正常,直到它神秘地停止工作。这种情况每x天发生一次,虽然服务的状态为已启动,但它并没有启动ProcessStuff
()方法。我使用log4net
并且没有记录任何内容或Windows事件日志。 ProcessStuff
()产生多个线程来完成一些工作。
如何解决此问题?
答案 0 :(得分:2)
ProcessStuff()
或GetTimerInterval()
是否可能抛出异常,以致timer.Start()
未执行?
然后您应该将该部分包装在try..catch
中和/或添加一些日志记录,例如:
timer.Stop();
try
{
//process some stuff here..
ProcessStuff();
}
catch (Exception ex)
{
// log the exception?
}
timer.Interval = GetTimerInterval();
timer.Start();
答案 1 :(得分:0)
我有两个想法。一个人创建一个转储,看看是什么,或者使用远程调试器,看看你锁定了什么。