当前位置: 代码迷 >> C# >> C#windows服务运行一段时间后失灵
  详细解决方案

C#windows服务运行一段时间后失灵

热度:46   发布时间:2016-05-05 04:48:29.0
C#windows服务运行一段时间后失效
用C#写的Windows服务,用来监测打印机状态,通过串口向另一台PC发送数据;每天计算机启动时,可以监测到打印机状态,串口向另一台PC发送数据可以接收到,运行大概一小时后,监测不到打印机状态,服务的状态还是已启动;这时如果重新启动服务,功能就会恢复正常,一段时间后功能就失效了,事件查看器中没有错误提示,安装服务的PC系统是Windows2003,安装了金山毒霸。一下为服务代码:
       protected override void OnStart(string[] args)
        {
            InitSetUp();
        }

        protected override void OnStop()
        {

        }
        
        void InitSetUp()
        {
            path = @"win32_printer.DeviceId='" + ConfigurationManager.AppSettings["Path"].ToString() + "'";

            sp.PortName = ConfigurationManager.AppSettings["Port"];
            sp.Open();

            thPrinter = new Thread(new ThreadStart(GetPrinterStart));
            thPrinter.IsBackground = true;
            thPrinter.Start();            
        }
        
        void GetPrinterStart()
        {
            try
            {
                while (true)
                {
                    PrinterStatus ret = 0;
                    ManagementObject printer = new ManagementObject(path);
                    printer.Get();
                    ret = (PrinterStatus)Convert.ToInt32(printer.Properties["PrinterStatus"].Value);

                    switch (ret)
                    {
                        case PrinterStatus.正在打印:
                            bPrinting = true;
                            break;
                        case PrinterStatus.打印中:
                            bPrinting = true;
                            break;
                        case PrinterStatus.空闲:
                            if (bPrinting)
                            {
                                WriteToSerialPort();
                                bPrinting = false;
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
            catch (Exception e)
            {
                WriteLogFile(e.ToString(), "error.txt");
            }
        }

        void WriteToSerialPort()
        {
            if (!sp.IsOpen)
            {
                sp.Open();
            }

            byte[] byteBuffer = { 0XBB, 0xC3, 0XEE };
            sp.Write(byteBuffer, 0, byteBuffer.Length);
           
        }

        enum PrinterStatus
        {
            其他状态 = 1,
            未知,
            空闲,
            正在打印,
            预热,
            停止打印,
            打印中,
            离线
        }
------解决思路----------------------
查看日志啊,看不好用了的时候到底发生了什么
如果你连到底是服务检测不到打印机状态了
还是串口发送出了问题
都没搞明白,
别人也只能是靠瞎猜
  相关解决方案