C# SerialPort.GetPortNames()错误

C# SerialPort.GetPortNames()错误,c#,C#,如果分离一个仍由windows使用的串行设备,SerialPort.GetPortNames()将返回实际仍在连接的已分离设备。如果没有未处理的异常错误,说明端口不存在(这是真的),我也无法关闭串行端口 我可以确认注册表中SERIALCOMM的设备映射也没有更新,这就是SerialPort.GetPortNames()获取我假定的端口名的地方。硬件管理器检测到正确的通信端口 有办法解决这个问题吗?我可以简单地删除SERIALCOMM注册表项吗? 我考虑了这个可能性,但我认为这只会让我抓住例外 我

如果分离一个仍由windows使用的串行设备,
SerialPort.GetPortNames()
将返回实际仍在连接的已分离设备。如果没有未处理的异常错误,说明端口不存在(这是真的),我也无法关闭串行端口

我可以确认注册表中SERIALCOMM的设备映射也没有更新,这就是
SerialPort.GetPortNames()
获取我假定的端口名的地方。硬件管理器检测到正确的通信端口

有办法解决这个问题吗?我可以简单地删除SERIALCOMM注册表项吗?
我考虑了这个可能性,但我认为这只会让我抓住例外

我不是专家,但我的经验是,只要有任何(SW-)对象连接到com端口,它就会可见

几年前,当我测试这个时,我得到了相同的结果,直到我丢失了SerialPort对象,端口才从GetPortNames列表中消失(可能还有注册表)

我想这就是Windows处理这个驱动程序的方式。如果串行端口在SW中使用时被拔出,系统将继续为串行端口提供一个固定器,直到SW将其释放

在我的软件中,我通过为我需要的功能设置一个超时来解决这个问题(另一端也可能停止工作),在每次新的程序循环开始之前(通常每5min-1h一次),我只是释放COM端口并重新连接到它,如果重新连接失败,端口被检测为丢失


希望这对您有所帮助。

可能重复:stackoverflow.com/questions/2754857/c-sharp-serialport-getportnames-behavior