C# 端口终止时侦听串行端口

C# 端口终止时侦听串行端口,c#,winforms,serial-port,port,virtual-serial-port,C#,Winforms,Serial Port,Port,Virtual Serial Port,所以我有一个C#WinForm可以使用 SerialPort SerialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); SerialPort1.Open() SerialPort1.DataReceived += new SerialDataReceivedEventHandler(...) 收听由其他软件创建的多个虚拟COM端口(我无法控制) 因此,通常情况下,它运行良好,除非其他软件已死亡或消失,否则

所以我有一个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设备通话时拔出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
            }
        }

谢谢你的回复。有办法解决这个问题吗?我无法控制串行端口丢失或丢失,但在软件方面我能做些什么???@user3479682我能向您推荐一款对我来说运行良好的软件吗?它叫。顺便说一句,在打开端口和向端口发送数据时,应该尝试使用try/catch块。