2016-12-02 7 views
0

私はWindowsのサービスを.netで開発しました。 5秒ごとに実行する必要があります。サービスをインストールして起動すると、正常に動作します。しかし、しばらくして(1または2日後)時間がかかり過ぎたり、アイドルになったりします。ここに私のスタートアップコード:Windowsサービスのアイドル

protected override void OnStart(string[] args) 
    { 
     try 
     { 
      processThread = new Thread(new ThreadStart(this.InitTimer)); 
      processThread.Start(); 
     } 
     catch (Exception failedtoStart) 
     { 
      DebugLog.LogAlert(failedtoStart.ToString(), 2); 
     } 
    } 

    protected override void OnStop() 
    { 
     timer.Enabled = false; 
    } 

    private void Timer_Elapsed(object sender, ElapsedEventArgs e) 
    { 
     try 
     { 
      if (isStarted) 
      { 
       isStarted = false; 
       [Some function] 
       isStarted = true; 
      } 
     } 
     catch (Exception ex) 
     { 
      DebugLog.LogAlert("Error: " + ex, 1); 
     } 
    } 

    private void InitTimer() 
    { 
     try 
     { 
      timer = new System.Timers.Timer(); 
      timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed); 
      timer.Interval = 5000; 
      timer.Enabled = true; 
      timer.Start(); 
     } 
     catch (Exception ex) 
     { 
      DebugLog.LogAlert("Error: " + ex, 1); 
     } 
    } 

もし私が何か間違っていたら私を修正してください。

+0

サービスの開始時にサーバー上にイベントログがあり、その時点でのサーバーの負荷状況を示すログがありますか?コードは私が見る限り良好に見えます。 – Fuzzybear

+0

@MaksimSimkinこれはWebサーバーに関するものです。 Windowsサービスではありません –

+3

[一部の機能]のキーが鍵になることがあります。それは何をするためのものか? –

答えて

0

まだコメントできません。 コードを見ると、5秒ごとに何らかの機能を実行したいが、同時に実行する必要はない。 メソッドが現在実行中であることを確認するためにブール値を維持する代わりに、関数を実行する前にタイマーを無効にしてからそれを有効にすることができます。

try 
    { 
     timer.Enabled = false; 
     [Some function] 
    } 
    catch (Exception ex) 
    { 
     DebugLog.LogAlert("Error: " + ex, 1); 
    } 
    Finally{ 
     timer.Enabled = true; 
    } 

@Nawed Nabi Zadaが指摘したように、例外の発生時にフラグイベントをリセットする必要があります。コードにそのコードがありません。

関連する問題