SerialPort在设备管理器中可见,但SerialPort.Open()报告无法找到它

时间:2015-05-08 09:06:28

标签: .net serial-port

我有一个侦听COM端口的.NET应用程序。连接的另一端是运行lubuntu的UDOO板。

重新启动udoo板后,COM端口暂时丢失,然后重新出现在设备管理器上。但是,当我调用SerialPort对象的“打开”功能时,我得到一个异常,说“端口COM4不存在”。完整的异常堆栈跟踪如下。

 at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
   at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
   at System.IO.Ports.SerialPort.Open()

即使抛出此异常,设备管理器也会显示与以下屏幕截图中可见的完全相同的COM端口。

enter image description here

是的,我确实刷新了设备列表。拔下电缆并将电缆插回计算机可以解决这个问题,但这并不优雅。

对于我如何解决这个问题有什么想法吗?

2 个答案:

答案 0 :(得分:1)

尝试禁用串口,然后重新启用。 还要检查硬件是否有问题。您可以通过在串行端口中插入USB设备来检查它。如果工作正常。使用调试器检查代码。

答案 1 :(得分:0)

只要您的应用程序检测到COM端口丢失,您就应该与它建立Close()连接。当它在系统中再次可用时,你不会遇到打开它的问题。

我有与ELMO驱动程序类似的问题。我们在USB连接串行(COM)和HID上使用了2个逻辑管道。 COM在一个进程中打开,HID在第二个进程中打开。 硬件重置和重新初始化USB后,COM和HID端口被列在设备管理器中,但我们无法再打开它。通常只有PC重置有帮助。我们花了一些时间试图找出问题所在,并且我们发现当USB不再可用时,HID进程没有关闭连接。 介绍这个简单的修复程序后,所有开始工作都没有问题。