如果分离仍在被Windows使用的串行设备,SerialPort.GetPortNames()
将返回与实际仍然连接的相同的分离设备。我也无法关闭串口,没有未说明的异常错误,说明端口不存在(这是真的)。
我可以确认注册表中SERIALCOMM的设备映射也没有更新,这是SerialPort.GetPortNames()
获取我认为的端口名称的地方。硬件管理器检测到正确的COMM端口。
有解决方法吗?我可以简单地删除SERIALCOMM注册表项吗? 我看了看这个潜在的workaround,但我想这只会让我抓住这个例外。
答案 0 :(得分:1)
我不是专家,但我的经验是,只要你有任何(SW-)对象连接到com-port,它就会可见。
几年前,当我测试这个时,我得到了相同的结果,直到我丢失了我的SerialPort对象后,端口从GetPortNames列表中消失了(并且也可能是注册表)。
我认为这是Windows处理此驱动程序的方式。如果串口在SW中使用时被拔掉,系统将继续为串口设置一个占位符,直到它被SW释放。
在我的SW中我解决了这个问题,因为我需要的功能超时(另一端也可以停止工作),并且在每次新的程序循环启动之前(通常每5min-1h一次)我刚刚发布了COM -port并重新连接到它,如果重新连接失败,则端口被检测为丢失...
希望这会对你有所帮助。