端口被终止时监听串口

本文关键字:监听 串口 终止 | 更新日期: 2023-09-27 18:15:07

所以我有一个c# WinForm使用

SerialPort SerialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
SerialPort1.Open()
SerialPort1.DataReceived += new SerialDataReceivedEventHandler(...)

监听由其他软件创建的几个虚拟COM端口(我无法控制它)

所以通常情况下它运行良好,除非当其他软件死亡或消失时,它创建的虚拟COM端口也消失或丢失

所以我的WinForm应用程序失败了,因为没有COM1可听

问题:当没有COM端口侦听时,我该如何处理此错误

非常感谢您的回复

端口被终止时监听串口

将其放入try - catch语句中,如果发生错误,则向用户打印消息。

try 
{
    SerialPort SerialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
    SerialPort1.Open()
    SerialPort1.DataReceived += new SerialDataReceivedEventHandler(...)
}
catch(Exception e)
{
    //Print error to user
}

有关异常的更细粒度,请参阅此处串口的msdn文档。

不,虚拟串行端口是由软件模拟的。如果那个软件失败了,那么当然就没有功能串行端口了。除了找到更好的软件,你别无他法。

如果这是常见的故障模式,当程序正在与USB设备交谈时拔出连接器,那么就不要麻烦了。无论谁这样做,都需要了解使用Windows"安全删除硬件"托盘图标选项是而不是可选的艰难方式。往往需要一些强化才能让他们意识到"不安全移除硬件"的作用。尽管奇怪的是,这样做的往往是程序员,而不是普通用户。可能是网站的偏见,而普通用户往往会自己发现这样做不是个好主意。事实并非如此,这些司机依靠人类的合作。必要的,因为串行端口不是插头&播放设备时,驱动程序无法发送"设备已用完,停止使用"的通知。好吧,除了故意硬崩溃你的程序。

如果唯一的问题是端口的数量是不可预测的,那么您可以检测如下所示的所有可用端口,并一次尝试一个。我曾经遇到过这个问题,当usb设备有时显示为COM1,其他时候显示为COM5

 string[] availablePorts = SerialPort.GetPortNames();
        foreach (string strPortName in availablePorts)
        {
            try
            {
                SerialPort SerialPort1 = new SerialPort(strPortName, 9600, Parity.None, 8, StopBits.One);
                SerialPort1.Open();
            }
            catch (Exception e)
            {
                //Print error to user
            }
        }