2010-02-26 34 views
2

我有一個帶有定時器(System.Timers.Timer)的.NET Windows服務(.NET 3.5)。該OnElapsed方法是這樣的:Windows服務已啓動,但什麼都不做 - .NET

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()會產生多個線程來完成一些工作。

我該如何解決這個問題?

+1

我們需要更多的數據來診斷正在發生的事情......您是否嘗試過使用調試器來檢查服務中線程的狀態?根據ProcessStuff()和GetTimerInterval()的作用,你可以掛在某處等待這些函數完成。 – 2010-02-26 21:39:29

回答

2

ProcessStuff()GetTimerInterval()是否可能引發異常,以致timer.Start()未執行?

那麼你也許應該換的那部分在try..catch和/或增加一些記錄,e.g:

timer.Stop(); 
try 
{ 
    //process some stuff here.. 
    ProcessStuff(); 
} 
catch (Exception ex) 
{ 
    // log the exception? 
} 
timer.Interval = GetTimerInterval(); 
timer.Start(); 
+0

極有可能的理論。 – Nick 2010-02-26 21:40:35

+0

這是可能的,但爲什麼只有在x天后纔會發生。我在ProcessStuff日誌中看到未處理的異常,並且定時器仍然可以運行 – DotnetDude 2010-02-26 21:42:31

+0

以確保您還可以添加一個全局異常句柄,該日誌句柄記錄到系統事件查看器「AppDomain.CurrentDomain.UnhandledException」 – 2010-02-26 21:42:52

0

我對你有兩個想法。一個創建一個轉儲,看看什麼是或使用遠程調試器,看看你在鎖定。

+0

我將如何創建轉儲?你能解釋一下嗎? – DotnetDude 2010-02-26 21:43:27

相關問題