Sha*_*fiz 3 c# serial-port visual-studio-2008
在我的 C# 2008 应用程序中,我使用 SerialPort.GetPortNames() 函数来检索当前可用端口的列表。我注意到的是,当我插入 USB 设备时,它的端口号会显示在我的应用程序的列表中,当我拔下它并刷新列表时,端口号不再存在。
应用程序的一个阶段涉及从/向设备连续读取/写入数据。现在,我的期望是,如果我在操作期间拔下设备并使用 SerialPort.GetPortNames() 获取当前端口列表,则端口名称将不存在,我可以使用它来决定设备已被拔掉。
令我惊讶的是,尽管删除了端口名称,但仍然可以找到它
为什么程序会这样?在无通信模式下不会列出端口名称。是否与在通信时被移除的设备有关?
您必须谈论 SerialPort.GetPortNames(),“GetPortList”没有意义。该函数迭代注册表中的值,这些值由您的 USB 模拟器设备驱动程序写入。您可以使用 Regedit.exe 进行查看,导航到 HKLM\Hardware\DeviceMap\SerialComm。拔下它,按 F5,如果 COM 端口仍然存在,那么 SerialPort 并不比端口仍然存在更好。
关于串行端口设备驱动程序在端口突然消失时的行为方式没有规定的行为。串口是非常原始的,它们可以追溯到一个时代,“bug”意味着一只飞蛾在电传打字机上涂胶。即插即用根本没有硬件支持,在打开电源的情况下移除端口相当于在 Windows 交换到页面文件时拔掉磁盘驱动器。
大多数设备驱动程序返回一个错误代码,它会生成一个无法捕获的异常,导致程序崩溃。这篇反馈文章的主题。显然您的设备驱动程序不会这样做,这应该比轰炸您的程序更可取。顺便说一句,令人鼓舞的是,大多数 USB 模拟器设备驱动程序都是垃圾。
最终的解决方法很简单:在插头上贴上一个小标签“使用时不要断开连接!” USB 有点问题,大多数人看着它就会说“嗯,我能用它做什么?”。并找到唯一的答案并拔掉它。经过几次 kaboom 之后,他们将学会不再那样做。
归档时间: |
|
查看次数: |
10797 次 |
最近记录: |