2015-07-27 2 views
-1

Я разработал сервис на C#, который использует HttpListener. Когда я останавливаю службу, процесс остается открытым некоторое время. Если я перезапустил службу, она сработает (возможно, потому, что используется порт).C#: закрытие приложения при остановке обслуживания

Как остановить процесс сразу после остановки службы (через сетевую остановку) или, по крайней мере, дождаться завершения процесса, прежде чем я начну новый.

это соответствующий фрагмент кода:

protected override void OnStart(string[] args) 
    { 
     Thread thread = new Thread(new ThreadStart(Listen)); 
     thread.Start(); 
    } 

    protected override void OnStop() 
    { 
     base.OnStop(); 
    } 
+0

Это не соответствующий фрагмент кода. Соответствующая часть - это код для 'Listen' –

ответ

0

Ваш OnStop метод должен принять какое-то действие, которое останавливает Слушающуюся нить. Вы можете сделать это несколькими способами:

  • Переместите «нить» сфера объекта выше, так что вы можете «прерывания» нить из OnStop (Это плохой способ сделать это)
  • Что бы ни было в Слушать нужно как-то уведомить, чтобы он остановил «Прослушивание» и вышел из потока. Самый простой способ - это «останавливать» переменную где-то, в которой вы устанавливаете значение true, которое ищет поток Listening, но, как Скотт справедливо говорит, что более подходящим будет cancelationToken. Кроме того, вам нужно использовать метод Stop() на HttpListener.
+1

. Примечание. Если вы собираетесь установить переменную, убедитесь, что вы пометили ее' volitile' или, возможно, цикл никогда не будет читать новое значение. Лучшим вариантом IMHO является передача в «CancelationToken» и проверка цикла. –

Смежные вопросы