2012-02-06 94 views
1

我處於僵局。 只需提供一項服務,例如每10秒執行一次。我首先使用了System.Timers.Timer。在我的電腦上一切正常。但是我在我的客戶的Windows Server 2003服務器上遇到了問題。 System.Timers.Timer timer1_Elapsed沒有射擊,我已經改變了System.Threading.Timer這個計時器,我看到了相同的圖片。它適用於我的電腦,不適用於客戶的服務器。 後,我放棄所有這些都定時器和使用了BackgroundWorked此任務 代碼:我無法在窗口服務中創建線程

public partial class XXXService : ServiceBase 
{ 
    public XXXService() 
    { 
     InitializeComponent(); 



     if (!System.Diagnostics.EventLog.SourceExists("XXXSource1")) 
      System.Diagnostics.EventLog.CreateEventSource("XXXSource1", "XXXLog"); 
     EventXXXLog.Source = "XXXSource1"; 
     EventXXXLog.Log = "XXXLog"; 
    } 

    private ManualResetEvent threadSleepEvent = new ManualResetEvent(false); 
    private BackgroundWorker fBg = new System.ComponentModel.BackgroundWorker(); 

    protected override void OnStart(string[] args) 
    { 
     EventXXXLog.WriteEntry("XXX Service has started."); 

     //fTimer.Enabled = false; 
     //fTimer.Interval = 1000; 
     //fTimer.Elapsed += new System.Timers.ElapsedEventHandler(fTimer_Elapsed); 
     //fTimer.Start(); 

     //fTimer = new System.Threading.Timer(new System.Threading.TimerCallback(fTimer_Elapsed), null, 1000, 5000); 

     fBg.DoWork += new System.ComponentModel.DoWorkEventHandler(fBg_DoWork); 

     EventXXXLog.WriteEntry("XXX Service has started. test 2"); 
     fBg.RunWorkerAsync(); 
     EventXXXLog.WriteEntry("XXX Service has started. test 3"); 
    } 

    void fBg_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) 
    { 
     //EventXXXLog.WriteEntry("test 4"); 
     lock (EventXXXLog) 
     { 
      EventXXXLog.WriteEntry("test 4"); 
     } 
    } 
} 

都是一樣的。在我的電腦上一切正常,但在Server 2003 comp上不起作用。我看到測試1,測試2和測試3日誌消息,並且看不到'測試4'。看起來BackgroundWorker不執行fBg_DoWork。

原因是什麼?有任何想法嗎?

+0

這可能僅適度有用,但您可能會考慮使用2003計算機出現配置問題的可能性。至少,我會在一個乾淨的2003安裝中嘗試這個。 – 2012-02-06 14:10:19

+1

是你正在運行的*精確*代碼 - 或者你是否已經將它修剪後發佈? – 2012-02-06 14:53:01

+0

@RobLevine是的,我已修剪。 – 2012-02-06 15:19:03

回答

0

有U前

鎖(EventEDILog)

獲取日誌因爲如果EventEDILog正在鎖被另一個線程永不解鎖 那麼你的BackgroundWorker的將被封鎖的EventEDILog得到解鎖。

+0

我嘗試了'鎖',沒有'鎖'。全部都一樣。 :( – 2012-02-06 14:19:52