0

私はいくつかのブログやフォーラムからまとめた Windows サービスを持っています。主に私が質問し、ここで回答した質問です。サービスは正常に動作します。唯一の問題は、サービスを停止するときです。さらに下に貼り付けたのは、停止したときにログ ファイルに表示される内容です。

public partial class GBBInvService : ServiceBase
{
    private static readonly ILog log = LogManager.GetLogger(typeof(GBBInvService));
    System.Timers.Timer timer = new System.Timers.Timer();
    private volatile bool _requestStop=false;
    private ManualResetEventSlim resetEvent = new ManualResetEventSlim(false);


    public GBBInvService()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        _requestStop = false;
        timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
        timer.Interval = 18000;
        timer.Enabled = true;
        timer.Start();
        log.Info("GBBInvService Service Started");
    }

    protected override void OnStop()
    {
        log.Info("inside stop"); 
        if (!_requestStop)
        {
            log.Info("Stop not requested");
            timer.Start();
        }    
        else
        {
            log.Info("On Stop Called");
            WaitUntilProcessCompleted();
        }
    }

    private void timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        log.Info("Timer elapsed at " + Convert.ToString(e.SignalTime)); 
        InvProcessing();
    }

    private void InvProcessing()
    {
        try
        {
            resetEvent.Reset();
           //*Processing here*
        }
        catch (Exception ex)
        {
            resetEvent.Set();
            log.Error(ex.Message); 
        }
    }


    private void WaitUntilProcessCompleted()
    {
        resetEvent.Wait();
    }
}

サービスは適切に停止し、正常に再起動しますが、ログ ファイルに次のように表示されているため、コードが間違っているかどうかはわかりません。

2013-04-23 14:53:01,062 [6] INFO GBBInvService.GBBInventoryService [(null)] – 内部停止

2013-04-23 14:53:01,062 [6] 情報 GBBInvService.GBBInventoryService [(null)] – 停止は要求されていません

(!_requestStop)代わりに の中に入っていelseます。私のコードは間違っていますか?(!_requestStop)なぜそれがelseステートメントの代わりに内側にあるのか、誰かが私に説明できるでしょうか。

私はWindowsサービスと最近のログの実践を始めたばかりなので、アドバイスをいただければ幸いです。

4

3 に答える 3