當試圖停止服務時,我收到「服務無法在此時接受控制消息」。我不明白爲什麼會發生這種情況。有人可以幫我弄這個嗎?我以爲我的鎖會阻止這一點。C#windows服務無法停止
巡邏方法大約需要30-40秒才能運行。
private static readonly string ConnectionString = ConfigurationManager.AppSettings["ConnectionString"];
private static readonly int runMinInterval = Convert.ToInt32(ConfigurationManager.AppSettings["RunMinInterval"]);
private Object myLock = new Object();
private Timer timer;
public DealWatchdogService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
Watchdog.Patrol(ConnectionString, new DealWatchdogService());
timer = new Timer();
timer.Enabled = true;
timer.Interval = 60000 * runMinInterval;
timer.AutoReset = false;
timer.Start();
timer.Elapsed += timer_Elapsed;
}
protected override void OnStop()
{
lock (myLock)
{
timer.Stop();
timer = null;
base.OnStop();
}
}
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
lock (myLock)
{
if (timer == null)
return;
Watchdog.Patrol(tycheConnection, new DealWatchdogService());
timer.Start();
}
}
編輯:也許有些幫助,但該服務停止罰款的時候,但是當它已經啓動並運行了一個星期左右,我得到這個錯誤。
如果這是'System.Timers.Timer',則不應同時使用['Enabled'](https://msdn.microsoft.com/en-us/library/system.timers.timer.enabled(v = vs.110).aspx)和'Start':「將Enabled設置爲true與調用Start相同(在配置期望的間隔之前,您可能不應啓用它)。可能不是你目前的問題,但值得銘記。 – 2015-03-19 11:02:57
是的,它是System.Timers.Timer。當然,我會看看那個和改變。 – MrProgram 2015-03-19 11:31:08
你是否在OnStop()以外的任何地方使用'myLock'?如果不是鎖不提供任何好處,一次只有一個線程會調用OnStop() – 2015-03-19 13:24:50