【问题标题】:SerialPort Does Not Exist After Exception异常后 SerialPort 不存在
【发布时间】:2013-03-29 00:53:57
【问题描述】:

我正在使用 C# 的 SerialPort 类通过 USB COM 端口进行通信。 SerialPort 可以正常打开并正常工作,直到发生异常。当我尝试通过我的应用程序使用端口时出现异常后,我得到另一个异常:“端口'COM6'不存在。”在关闭应用程序、重新启动 Visual Studio 等后,我不断收到异常。恢复端口的唯一方法是重新启动计算机。

有没有人看到这个问题并知道解决方法?我需要这个更耐用。

【问题讨论】:

  • 一个问题:为什么会出现异常?你的代码发生了什么?
  • 通讯超时。我也在对串行设备进行编程,并且正在调试它。通信超时是由串行设备中的编程错误引起的,但错误的通信不应使端口崩溃。我的错误实际上为通信强化创造了一个很好的测试用例。
  • 在将 USB 用作类似的 COM 设备时,我肯定看到过这个问题。在低级别仍然必须有一个端口打开的句柄,因此当您遇到未处理的异常时,操作系统在您重新启动之前不会取回设备。有没有办法在 finally 块中捕获异常并关闭端口?此外,它可能会将 USB 设备重新分配给新的 COM 端口,因此您可能必须在更高的端口上检测它。
  • 那里有很多糟糕的 USB 驱动程序。您正在检查串行设备,但很可能是导致超时的驱动程序。之后麻烦不断。把它扔掉,从不同的制造商那里再买一个。
  • @JakeAnderson:设备管理器仍将其报告为 COM6。我尝试了几个不同的 COM,但它没有移动。

标签: c# serial-port usbserial


【解决方案1】:

这种问题的发生通常是因为您的 USB 转串口驱动程序没有正确编写以处理异常。

与其重新启动机器,不如尝试拔下并重新插入(几秒钟后)。通过这样做,之前的实例可能会卸载,并且在插入它时,它将再次加载相关的驱动程序。

这将在设备管理器中枚举一个 com 号(在您的情况下为 Com6)。

您可以使用以下链接中的“devcon.exe”重新启动 USB 连接。

http://digital.ni.com/public.nsf/allkb/1D120A90884C25AF862573A700602459

您可以将它集成到控制台应用程序并重新连接您的 USBTOSerial 而无需重新启动您的机器

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 2021-02-01
    • 2014-01-16
    • 2020-02-12
    • 2020-06-01
    • 2017-11-07
    相关资源
    最近更新 更多