1

無限ループで定期的に実行されるいくつかのタスクを実行する基本的な Windows サービスがあります:「ExecuteServiceWorkerMethods()」。以下のように、OnStart() メソッドからワーカー スレッドを介して無限ループを開始しています。

OnStart(string[] args)
{
       workerThread = new Thread(ExecuteServiceWorkerMethods);
       workerThread.Name = "ServiceWorkerThread";
       workerThread.IsBackground = false;
       workerThread.Start();
}

OnStop() メソッドのワーカー スレッドをどうするか迷っています。

私の無限ループは次のようになります。

private void ExecuteServiceWorkerMethods()
{
      while (!serviceStopped)
      {

    DO WORK....

          while (servicePaused)
          {
              Thread.Sleep(sleepTimeMillisecondsWhileServicePaused);
          }
      Thread.Sleep(sleepTimeMillisecondsWhileServiceNotStopped);
      }
}

これはすべて非常に基本的なことです。Windows サービスを開始および停止できるようにしたいだけです。

4

1 に答える 1

0

あなたのコードは、ここにあるコードにかなり厳密に従っているようです。

次のようなものを使用できるはずです。

protected override void OnStop()
{
   // flag to tell the worker process to stop
   serviceStopped = true;

   // give it a little time to finish any pending work
   workerThread.Join(new TimeSpan(0,2,0));
}

.Join を呼び出すと、スレッドが終了します。

于 2013-07-07T15:28:37.903 に答える