当我单击Windows服务区域中的“停止"按钮时,为什么服务没有停止? [英] Why doesn't my service stop when i click the stop button in the windows services area?

查看:96
本文介绍了当我单击Windows服务区域中的“停止"按钮时,为什么服务没有停止?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

using System;
using System.Net;
using System.Collections.Generic;
using System.ServiceProcess;
using System.IO;
using System.Threading;
using System.Net.Sockets;
using System.Text;


namespace C_AService
{
    public partial class C_AServiceListener
    {
        private const int listnerPort = 55000;
        bool continueListener;
        StreamWriter ca_StreamWriter;
        FileStream fs;

        public static int Main(string[] args)
        {
            C_AServiceListener caService = new C_AServiceListener();

            Thread oThread = new Thread(new ThreadStart(caService.RetrieveMessage));

            caService.RetrieveMessage();

            // Start the thread
            caService.ContinueListener = true;
            oThread.Start();     

            // Request that oThread be stopped
            caService.ContinueListener = false;

            // Wait until oThread finishes. Join also has overloads
            // that take a millisecond interval or a TimeSpan object.
            oThread.Join();
            return 0;
        }

        public C_AServiceListener()
        {
            continueListener = false;
            fs = new FileStream(@"C:\Users\Tim Hein\Desktop\Hardware Devices\Cal-Amp\C-AServices.txt",
            FileMode.OpenOrCreate, FileAccess.Write);

            ca_StreamWriter = new StreamWriter(fs);

            ca_StreamWriter.BaseStream.Seek(0, SeekOrigin.End);


            if (fs.CanWrite)
            {
                ca_StreamWriter.WriteLine("Service Started: " + DateTime.Now.ToShortDateString()
                    + " at " + DateTime.Now.ToShortTimeString());
            }
            else
            {
                throw new Exception("Failed: Can''t Write.");
            }
        }

        ~C_AServiceListener()
        {
            ca_StreamWriter = null;
        }

        public bool ContinueListener
        {
            get { return continueListener; }
            set { continueListener = value; }
        }

        public void RetrieveMessage()
        {
            UdpClient ca_Listener = new UdpClient(listnerPort);
            IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listnerPort);
            bool done = false;
            ca_StreamWriter.BaseStream.Seek(0, SeekOrigin.End);

            try
            {
                while (!done)
                {
                    ca_StreamWriter.WriteLine("Waiting for connection.....");
                    byte[] bytes = ca_Listener.Receive(ref groupEP);


                    ca_StreamWriter.WriteLine("Listener Started");
                    ca_StreamWriter.WriteLine("Received Broadcast from {0} :\n {1}\n",
                        groupEP.ToString(), Encoding.ASCII.GetString(bytes, 0, bytes.Length));
                }

                ca_StreamWriter.WriteLine("Connection Closed");
            }
            catch (Exception e)
            {
                ca_StreamWriter.WriteLine("Listener Exception: {0}", e);
            }
            finally
            {
                //Stop listening
                ca_Listener.Close();
            }
            ca_StreamWriter.WriteLine("Listener Shutting Down");
            ca_StreamWriter.Flush();
        }
    }
}

推荐答案

首先猜测-您永远不会在while循环中将done设置为true.
First guess - you''re never setting done to true in the while loop.


这篇关于当我单击Windows服务区域中的“停止"按钮时,为什么服务没有停止?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆