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); } } }