C#windows服务运行一段时间后失效
左手の倒影 2015-02-11 09:59:13 用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,
未知,
空闲,
正在打印,
预热,
停止打印,
打印中,
离线
}