Я получаю «Услуга не может принимать управляющие сообщения в это время» при попытке остановить службу. Я не понимаю, почему это происходит. Может кто-то помочь мне с этим? Я думал, что мой замок помешает этому.Служба Windows C# не может остановить
Метод Patrol занимает около 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();
}
}
EDIT: Может быть, какая-то помощь, но служба останавливается нормально иногда, но когда он был запущен и работает в течение недели или около того, я получаю эту ошибку.
Если это 'System.Timers.Timer', вы не должны использовать оба параметра [' Enabled'] (https://msdn.microsoft.com/en-us/library/system.timers.timer.enabled (v = vs.110) .aspx) и 'Start':« Установка Enabled to true совпадает с вызовом Start »(и вы, вероятно, не должны включать его, прежде чем вы настроили нужный интервал). Наверное, это не ваша текущая проблема, но стоит иметь в виду. –
Да, это System.Timers.Timer. Я посмотрю на это и поменяю, конечно. – MrProgram
Вы используете 'myLock' где угодно, кроме OnStop()? если не блокировка не приносит никакой пользы, только один поток за раз когда-либо вызовет OnStop() –