Обращение к объекту в потоке (Windows service) - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Вкратце ситуация: пишу вин службу с tcp сервером. В главном классе (:ServiceBase) выделяю в поток свой класс(MyServer), в котором инициализируется TcpListener и начинает прослушку, в этом же классе создаю метод stopServer() в котором останавливаю прослушку листенера(listener.Stop()). В основном классе службы, в методе OnStop (дефолтный override метод остановки службы) прописываю MyServer.stopServer(). Всё нормально компилится, служба запускается, листенер работает, но при остановке службы вылетает окно "Не удалось остановить службу. Эта служба не возвращала ошибки. Возможно это внутренняя ошибка Windows или внутренняя ошибка службы... ". Если убрать в основном классе вызов MyServer.stopServer() то служба останавливается без ошибок. Но как-то некрасиво получается... Хоть листенер и попадёт под GC, охото всё равно нормально завершать все процессы. Заранее благодарен за ответы.

Решение задачи: «Обращение к объекту в потоке (Windows service)»

textual
Листинг программы
protected override void OnStart(string[] args)
        {
            Thread ct_server_thread = new Thread(delegate() { ct_server = new CTserver(); });
            ct_server_thread.Start();
        }
 
protected override void OnStop()
        {
            //ct_server.stopServer();
            Dispose(true);
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы