Это обычно происходит, если у вас слишком много/весь ваш код работает внутри вашего обработчика OnStart
- вы должны убрать с него вещи, а затем вернуться. Это только после того, как вы вернетесь, что ваша служба считается запущенной.
Обычно вы создаете один или несколько новых Thread
s, которые запускают код, который вы хотите запустить все время, Start()
, а затем возвратитесь. Или создайте объекты, которые неявно запускают собственную потоковую обработку (например, WCF ServiceHost
).
Тогда это ваша работа в OnStop
, чтобы закрыть их изящно - например. Set
a ManualResetEvent
, а затем Join
на эти темы.
например, ваш класс может выглядеть следующим образом (не тестировалось)
public class MyService : ServiceBase {
private ManualResetEvent _stop = new ManualResetEvent(false);
private Thread _worker;
public override void OnStart(string[] args) {
_worker = new Thread(DoStuff);
_worker.Start();
}
public override void OnStop() {
_stop.Set();
_worker.Join();
}
private void DoStuff() {
while(!_stop.WaitOne(0)) {
//Do something useful here.
}
}
}
Это обычно происходит, если у вас есть слишком много/весь код работает внутри вашего 'OnStart' обработчика - вы призваны пнуть вещи тут же * return *. Это только после того, как вы вернетесь, что ваша служба считается запущенной. –
Как мне туда вернуться? – Joetjah