【问题标题】:Listening Serial Port when Port got termintated端口终止时侦听串行端口
【发布时间】:2014-07-25 15:37:04
【问题描述】:

所以我有一个使用的 C# WinForm

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

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

所以一般情况下它都很好,除了当其他软件死掉或消失时,它创建的虚拟 COM 端口也消失或丢失

所以我的 WinForm App 失败了,因为没有 COM1 可以收听

问题:当没有COM端口可以监听时,我应该如何处理这个错误

非常感谢您的回复

【问题讨论】:

    标签: c# winforms serial-port port virtual-serial-port


    【解决方案1】:

    把它放在一个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
    }
    

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

    【讨论】:

      【解决方案2】:

      嗯,不,虚拟串行端口是由软件模拟的。如果该软件出现故障,那么当然就不再有功能性的串行端口了。除了找到更好的软件之外,您无能为力。

      如果这是常见的故障模式,那么在程序与 USB 设备通信时拔掉 USB 设备的连接器,那就别费心了。任何人都需要了解使用 Windows“安全删除硬件”托盘图标选项不是可选的硬方法。要让他们意识到“不安全地删除硬件”的作用,往往需要一些强化。尽管奇怪的是,这样做的往往是程序员,很少是普通用户。可能是网站偏见,普通用户只是倾向于自己弄清楚这样做不是一个好主意。不是,这些司机指望人类合作。由于串口不是即插即用设备,因此驱动程序无法发送“设备已消失,停止使用”通知。好吧,除了故意让你的程序崩溃。

      【讨论】:

      • 感谢您的回复。有什么办法可以解决这个问题?我无法控制串行端口丢失或消失,但我可以在软件方面做什么??
      • @user3479682 我可以向您推荐一个对我来说运行良好的软件吗?它被称为com0com。顺便说一句,当你打开端口和向它发送数据时,你应该尝试使用 try/catch 块。
      【解决方案3】:

      如果唯一的问题是端口号不可预测,您可以检测所有可用端口,如下所示,然后一次尝试一个。我曾经遇到过这个问题,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
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-23
        相关资源
        最近更新 更多