gpt4 book ai didi

c# - SerialPort.GetPortNames() 行为

转载 作者:行者123 更新时间:2023-11-30 19:50:04 25 4
gpt4 key购买 nike

在我的 C# 2008 应用程序中,我使用 SerialPort.GetPortNames() 函数来检索当前可用端口的列表。我注意到,每当我插入 USB 设备时,它的端口号都会显示在我的应用程序列表中,而当我拔下它并刷新列表时,端口号不再存在。

应用程序的一个阶段涉及连续从设备读取数据/向设备写入数据。现在,我的期望是,如果我在操作期间拔下设备并使用 SerialPort.GetPortNames() 获取当前端口列表,则端口名称将不存在,我可以使用它来确定设备已被拔下。

令我惊讶的是,尽管删除了端口名称,但仍然可以找到它

为什么程序会这样?处于无通信模式时,不会列出端口名称。与通信时设备被移除有关系吗?

最佳答案

必须谈论 SerialPort.GetPortNames(),“GetPortList”没有意义。该函数迭代注册表中的值,这些值由您的 USB 仿真器设备驱动程序写入。您可以使用 Regedit.exe 查看,导航至 HKLM\Hardware\DeviceMap\SerialComm。拔下它,按 F5,如果 COM 端口仍然存在,那么 SerialPort 不知道端口仍然存在。

关于串行端口设备驱动程序在端口突然消失时应该如何行为,没有规定的行为。串行端口非常原始,它们可以追溯到一个时代,在这个时代,“错误”意味着飞蛾会破坏电传打字机。即插即用完全没有硬件支持,在打开电源的情况下移除端口相当于在 Windows 交换到页面文件时拔下磁盘驱动器。

大多数设备驱动程序返回一个错误代码,它会生成一个无法捕获的异常,使您的程序崩溃。 this feedback article的主题.显然你的设备驱动程序不会那样做,这应该比轰炸你的程序更可取。顺便说一句,大多数 USB 仿真器设备驱动程序都是垃圾。

最终的解决方法很简单:在插头上贴上一个小标签“不要在使用时断开连接!” USB 有点问题,大多数人看着它然后说“嗯,我能用它做什么?”。并得出唯一的答案并拔掉它。几次咔嚓声之后,他们就会学会不再那样做。

关于c# - SerialPort.GetPortNames() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com