Windows服务已启动,但不执行任何操作-.NET

Windows服务已启动,但不执行任何操作-.NET,.net,.net-3.5,windows-services,.net,.net 3.5,Windows Services,我有一个带计时器的.NET Windows服务(.NET 3.5)(System.Timers.timer)。OnElapsed方法如下所示: private void OnTimerElapsed(object source, ElapsedEventArgs e) { lock (this) { timer.Stop(); //process some stuff here..

我有一个带计时器的.NET Windows服务(.NET 3.5)(
System.Timers.timer
)。
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
()生成多个线程来完成一些工作


如何解决此问题?

是否有可能
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();

我有两个想法给你。您可以创建一个转储并查看发生了什么,或者使用远程调试器并查看锁定了什么

我们需要更多的数据来诊断发生了什么。。。您是否尝试附加调试器来检查服务中线程的状态?根据ProcessStuff()和GetTimerInterval()所做的工作,您可能只是挂在某个地方等待这些函数完成。这是可能的,但为什么只有在x天后才会发生呢。我确实在ProcessStuff日志中看到未处理的异常,并且计时器仍然工作,以确保您还可以添加一个全局异常句柄,该句柄记录到系统事件查看器“AppDomain.CurrentDomain.UnhandledException”@DotnetDude:如果不知道这些方法的作用,很难回答。@Martin-我将添加try-catch块。你是在建议在catch块中,我尝试重新启动计时器吗?@DotnetDude:不,你必须在catch块之后重新启动计时器。否则,它将仅在引发异常时启动。我将更新我的答案…我将如何创建转储?你能解释一下吗