我正在编写一个通过USB到RS232适配器使用虚拟(共享)串行端口的应用程序。如果用户不小心断开了USB适配器的连接,我的数据流将停止(有时会引发IO异常,但并非总是如此)。通常,用户只需重新连接端口,侦听器将继续。但是我需要重置所有我发现的虚拟端口应用程序,然后必须重新初始化我的应用程序。我可以在监听器中设置读取超时,但是我很好奇是否存在使用属性更改事件处理程序检测端口的干净方法。由于它是一个虚拟端口,因此我认为使用硬件级命令不会起作用。我仅使用while循环就在控制台应用程序中实现了检测,在该循环中,我使用GetPortNames不断轮询端口。但这在使用DataReceived事件处理程序的表单应用程序中是不切实际的,特别是考虑到我对数据流进行的所有解析。我搜索了多个站点(包括此站点),但没有人充分解决此问题。请任何帮助表示赞赏。