C# 异常后SerialPort不存在

C# 异常后SerialPort不存在,c#,serial-port,usbserial,C#,Serial Port,Usbserial,我使用C#的SerialPort类通过USB COM端口进行通信。SerialPort可以正常打开并正常工作,直到出现异常。在异常之后,当我尝试通过我的应用程序使用端口时,我得到另一个异常:“端口'COM6'不存在。”在关闭应用程序、重新启动Visual Studio等之后,我继续获得异常。恢复端口的唯一方法是重新启动计算机 有人见过这个问题并知道解决方法吗?我需要它更耐用。通常出现这种问题是因为您的USB到串行驱动程序没有正确写入以处理异常 不要重新启动机器,而是尝试拔下插头并再次插入(几秒钟

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


有人见过这个问题并知道解决方法吗?我需要它更耐用。

通常出现这种问题是因为您的USB到串行驱动程序没有正确写入以处理异常

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

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

有一种方法可以使用“devcon.exe”重新启动USB连接,如下链接所示


您可以将其集成到控制台应用程序,并在不重新启动计算机的情况下重新连接USBTOSerial

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