2016-12-23 4 views
-3

サービスのOnStartイベントのメインプロセスを呼び出すWindows .Netサービスをc#を使用して作成したい場合、そのメインプロセスが完了したら、手動でサービスを停止するまで、自動的に再度実行します。メインプロセスは完了するまでに数時間かかることがあり、完了までの時間はさまざまなので、タイマーを使用したくないです。メインプロセスをwhileループに入れたり、他の制御メカニズムが必要な場合は簡単ですか? ; itsme86 @彼のコメントで言った、私のサービスのOnStartメソッドでは、私はスレッドを追加し、以下のように、私のコードでそれをする方法を割り当てるに完了時にWindowsサービスのメインプロセスを繰り返すにはどうすればいいですか?

おかげ

+0

ループ内で繰り返したいコードを置くのに間違っていますか?あなたのコードの構造を少なくとも見ていなくては難しいです。 OnStart()がタイムリーに返されるようにしたいだけです。 – itsme86

+0

なぜ私は-3ダウン投票を得たのか不思議です。誰かが説明をコメントすることができれば、私はその質問で間違っていたものを、将来、やめさせることができます。どうも – EiEiGuy

答えて

1

ビル

private bool m_isRunning = false; 
    Thread m_thread; 

    protected override void OnStart(string[] args) 
    { 
     try 
     { 
      m_thread = new Thread(StartService); 
      m_thread.Start(); 
      m_isRunning = true; 

     } 
     catch (Exception ex) 
     { 
      if (m_logger != null) 
      { 
       m_logger.Error(ex, "An exception has occurred in the OnStart method call"); 
      } 
      throw new Exception(ex.Message); 
     } 
    } 

私のOnStopメソッドでは、次のコードを追加しました。

protected override void OnStop() 
    { 
     try 
     { 
      m_isRunning = false; 
      m_logger.Information("Application stopped."); 
      m_thread = null; 
     } 
     catch (Exception ex) 
     { 
      if (m_logger != null) 
      { 
       m_logger.Error(ex, "An exception has occurred in the OnStop method call"); 
      } 
      throw new Exception(ex.Message); 
     } 
    } 

以下に示すように、私は、StartServiceメソッドでループを設定します。

private void StartService() 
    { 
     try 
     { 
      InitializeLogger(); 
      m_logger.Information("Application started."); 
      while (m_isRunning) 
      { 
       RunProcess(); 
      } 

     } 
     catch (Exception ex) 
     { 
      if (m_logger != null) 
      { 
       m_logger.Error(ex, "An exception has occurred in the StartService method call"); 
      } 
      throw new Exception(ex.Message); 
     } 
    } 

RunProcess方法は、サービス業務を行い、それが完了したとき、それが原因StartServiceメソッドでwhileループに再び発射します。

これはすべて私が望んでいたように機能するようです。

関連する問題