public void StopService()
        {
            if (_StartMode != ConsoleStartMode.Service)
            {
                Console.WriteLine("Arguments Exception");
                return;
            }

            //Console.WriteLine();
            Console.WriteLine("正在退出服务 ...");
            _StartMode = ConsoleStartMode.Default;

            if (TCPServer != null)
            {
                TCPServer.ServerDataReceived -= Server_DataReceived;
                TCPServer.ServerStateChanged -= Server_StateChanged;
                TCPServer.ClientStateChanged -= Server_ClientStateChanged;
                Console.WriteLine(TCPServer.Destroy() ? "TCP Server 已停止服务 ..." : "TCP Server 服务停止失败 ...");

                TCPServer = null;
            }

            if (UDPServer != null)
            {
                UDPServer.ServerDataReceived -= Server_DataReceived;
                UDPServer.ServerStateChanged -= Server_StateChanged;
                UDPServer.ClientStateChanged -= Server_ClientStateChanged;
                Console.WriteLine(UDPServer.Destroy() ? "UDP Server 已停止服务 ..." : "UDP Server 服务停止失败 ...");

                UDPServer = null;
            }

            Thread.Sleep(500);
            Environment.Exit(0);
        }
        public void StartService(String args)
        {
            if (_StartMode != ConsoleStartMode.Default || TCPServer != null || UDPServer != null)
            {
                Console.WriteLine("Input Arguments Exception.");
                return;
            }

            Console.Title = Title;
            _StartMode    = ConsoleStartMode.Service;

            //安全退出处理
            ControlCtrl = new ControlCtrlDelegate(ConsoleExitHandler);
            ConsoleApplication.SetConsoleCtrlHandler(ControlCtrl, true);

            //服务模式启动后不可重复启动
            bool  createdNew;
            Mutex mutex = new Mutex(true, InputHeader + ".Service", out createdNew);

            if (!createdNew)
            {
                Console.WriteLine("Services Error 服务正在运行中 ...");
                MessageBox.Show("服务正在运行中...", "Error", MessageBoxButton.OK, MessageBoxImage.Warning, MessageBoxResult.OK);
                Console.WriteLine("Exiting ...");

                Thread.Sleep(100);
                Environment.Exit(0);
                return;
            }

            if (!String.IsNullOrWhiteSpace(args) && ConsoleApplication.Uint_Regex.IsMatch(args))
            {
                ServicePort = Convert.ToInt32(args);
            }

            //独立线程运行服务
            Thread thread = new Thread(() =>
            {
                Console.Title = String.Format("{0}   Port:{1}", Title, ServicePort);
                Console.WriteLine("{0} Starting ... ", Title);

                TCPServer = new TCPServer();
                if (TCPServer.Start(ServicePort))
                {
                    TCPServer.ServerDataReceived += Server_DataReceived;
                    TCPServer.ServerStateChanged += Server_StateChanged;
                    TCPServer.ClientStateChanged += Server_ClientStateChanged;
                    Console.WriteLine("TCP Server 启功完成 Port:{0},等待客户端连接 ...", ServicePort);
                }
                else
                {
                    TCPServer.Destroy();
                    TCPServer = null;
                    Console.WriteLine("TCP Server 启动失败,检查端口 {0} 是否被占用", ServicePort);
                }

                UDPServer = new UDPServer();
                if (UDPServer.Start(ServicePort))
                {
                    UDPServer.ServerDataReceived += Server_DataReceived;
                    UDPServer.ServerStateChanged += Server_StateChanged;
                    UDPServer.ClientStateChanged += Server_ClientStateChanged;
                    Console.WriteLine("UDP Server 启功完成 Port:{0},等待客户端连接 ...", ServicePort);
                }
                else
                {
                    UDPServer.Destroy();
                    UDPServer = null;
                    Console.WriteLine("UDP Server 启动失败,检查端口 {0} 是否被占用", ServicePort);
                }
                Console.Write("{0}>", InputHeader);
            });

            thread.Name = Title;
            thread.Start();

            //可输入模式
            while (_StartMode == ConsoleStartMode.Service)
            {
                Console.Write("{0}>", InputHeader);
                String input = Console.ReadLine();
                if (String.IsNullOrWhiteSpace(input))
                {
                    continue;
                }

                String[] arguments = ConsoleApplication.ParserInput(input);
                if (arguments != null)
                {
                    ConsoleApplication.Run(this, arguments);
                }
            }
        }