- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 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/
我正在对 com 端口进行快速测试。我在我的电脑上运行以下代码,但它只将 COM1 添加到组合框?我的电脑有 6 个 USB 端口,为什么只找到 1 个? string[] ports = Seria
在我的 C# 2008 应用程序中,我使用 SerialPort.GetPortNames() 函数来检索当前可用端口的列表。我注意到,每当我插入 USB 设备时,它的端口号都会显示在我的应用程序列表
SerialPort.GetPortNames(); 返回以下数组: { "COM1", "COM5", "COM5", "COM5", "COM5", "COM5", "COM5" } 它通常每个名
虽然 c# 不是我的主要编程语言,但我已经维护了这样一个程序几年了。该程序通过串行端口连接到设备,适用于 Windows XP 至 8.1。一个特定的“功能”是它使用 .NET Framework 2
我试图在 Mono 中使用 SerialPort.GetPortNames() 接收所有连接端口的数组,但它返回如下内容: (Mac 但在 Linux 上应该是一样的) ApfelBuch:~ jan
一两年前,我在 Windows 8 或 Windows 8.1 中编写了一个简单的程序,它提供 Arduino Uno 和我的 C# Form 应用程序之间的串行端口连接。首先,我检查了 pc 中所有
只有一行: System.IO.Ports.SerialPort.GetPortNames(); 它在调试时运行良好,但发布的版本会产生 DirectoryNotFoundException: Sys
我是一名优秀的程序员,十分优秀!