【发布时间】:2019-06-12 04:16:13
【问题描述】:
我正在尝试使用使用 com 端口的热敏打印机进行打印。我想检测打印机是否连接。
我假设如果我尝试在不连接打印机的情况下运行尝试打印的代码,我会遇到某种错误。所以我使用了 try-catch 块。以下是我到目前为止所尝试的。
using System.IO.Ports;
private readonly SerialPort _printer = new SerialPort(Port, BaudRate, Parity, DataBits, Stopbits);
private void Print(string text)
{
try
{
if (!_printer.IsOpen)
_printer.Open();
_printer.WriteLine(text);
_printer.Close();
}
catch (Exception ex)
{
Logging.Log("PRINT ERROR: " + ex.Message);
}
}
在大多数情况下,如果您在打印机断开连接的情况下尝试以编程方式打印,尝试打印的代码块将抛出错误。
但在这种情况下,代码的执行就像打印机已连接并且没有引发错误一样。
我也尝试过SerialPort.ErrorReceived 事件,但也没有用。
所以,我想知道是否有办法检测打印机的状态(无论是连接还是断开连接)。感谢您的帮助。
【问题讨论】:
-
Com 端口是一项古老的技术,它支持它所支持的东西,更可能你永远不会知道。
-
嗯,在 PIN 5 (25-Pin) 或 Pin 8 (9-Pin) RS232 上有 CTS (Clear to Send) 信号。 但是硬件和驱动需要支持。那是“串行仿真”(即USB伪装成RS232)吗?在后一种情况下,可能根本不使用“PIN”。那你就不走运了。
-
您可以使用轮询:定期发送命令(例如请求状态或其他内容)。如果 3 次重试后没有得到答案 - 它离线。 “代码块” - 另一个问题,你没有在某处设置超时。
标签: c# winforms printing serial-port escpos