私はいくつかのブログやフォーラムからまとめた 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サービスと最近のログの実践を始めたばかりなので、アドバイスをいただければ幸いです。