2012-02-06 5 views
1

私は窮屈です。 例えば10秒ごとに何かをするサービスを作るだけです。 最初はSystem.Timers.Timerを使用しました。私のPC上ではすべてOKだった。しかし、私は顧客のWindows Server 2003サーバーの問題に直面していました。 System.Timers.Timer timer1_Elapsedは発砲せず、System.Threading.Timerのためにこのタイマーを変更しました。同じ画像が表示されます。それは私のPC上で動作し、顧客のサーバー上で動作しません。すべて同じウィンドウサービスでスレッドを作成できません

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"); 
     } 
    } 
} 

:私はすべてのこれらのタイマーの両方をドロップすると、このタスク コードのためBackgroundWorkedを使用した後 。私のPC上ではすべて正常ですが、Server 2003のコンプでは動作しません。テスト1、テスト2、テスト3のログメッセージが表示され、「テスト4」は表示されません。 BackgroundWorkerはfBg_DoWorkを実行していないようです。

原因は何ですか。何か案は? EventEDILogは、別のスレッドによってロックされてとアンロックされることはありません場合は 、あなたのBackgroundWorkerのロックが解除取得するEventEDILogのためにブロックされますので

+0

これはおそらく適度に役立ちますが、2003マシンの設定に問題がある可能性が考えられます。少なくとも、私はきれいな2003年のインストールでこれを試してみましょう。 –

+1

はあなたが実行している* exact *コードですか?それをポストするためにそれをトリミングしましたか? –

+0

@RobLevineはい、私はトリミングしました。 –

答えて

0

uは

ロック(EventEDILog)

前にログを取得しています。

+0

私は 'ロック'と 'ロック'なしでトライしています。すべて同じ。 :( –

関連する問題