C#SerialPort GetPortNames不适用于Windows 10

时间:2016-02-22 18:42:07

标签: c# arduino-uno serial-communication

我在一年或两年前在Windows 8或Windows 8.1中创建了一个简单的程序,它提供了Arduino Uno和我的C#Form Application之间的串行端口连接。首先,我检查pc中所有打开的COM端口,并获取这些端口以进行连接选择。要做到这一点,工作代码就像下面给出的那样;

private void portCheck_Click(object sender, EventArgs e)
        {
            foreach (string item in System.IO.Ports.SerialPort.GetPortNames())
            {
                //store the each retrieved available port names into the Listbox...    
                if (!portBox.Items.Contains(item))
                { portBox.Items.Add(item); }
            }
        }

我没有打开这个程序很长一段时间,现在我格式化我的电脑并使用Windows 10 Education进行全新安装。当我运行这个项目时,我意识到该程序没有找到任何开放的COM端口。它不会进入foreach循环,只需System.IO.Ports.SerialPort.GetPortNames()不返回任何端口名称。 我做了一些研究,并在Windows 10中阅读了类似这种情况的问题。 人们提供了完全不同的串行连接解决方​​案。 我不想重写整个项目。那么有没有人知道这个问题呢?对此有什么简单的解决方案吗?

3 个答案:

答案 0 :(得分:0)

升级到Windows 10后,您确定串口本身是否正常工作吗?

  • 是否出现在设备管理器中?
  • 它是否出现在$(#linkid).on('click',function(){ url='url/path/to/controller/method'; $('#targetdiv').load(url); } 下的注册表中(SerialPort.GetPortNames()获取其信息的位置)?

有趣的是,我维护使用SerialPort.GetPortNames()枚举串口的软件,它在Windows 10上运行正常。

答案 1 :(得分:0)

这是一个老线程,但由于它没有解决,因为我刚刚在新的Win10笔记本电脑上遇到过同样的问题,我想我会分享我的解决方案。我终于发现我必须从Silicon Labs下载VCP驱动程序,在运行x64安装程序后,一切正常。 我不认为我必须在我的Win7笔记本电脑上这样做,所以这对Win10来说很不方便。

答案 2 :(得分:0)

Мy问题(Win10)是从USB删除设备时,相应的端口没有从列表中消失(SerialPort.GetPortNames(),C#) 而且它甚至保留在寄存器中。 我看到了:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM]
"\\Device\\USBSER000"="COM11"
"\\Device\\USBSER002"="COM53"
"\\Device\\VCP0"="COM4"
"\\Device\\USBSER001"="COM11"

我了解问题何时发生,但我不知道如何绕过它:当我占用端口并通过USB关闭设备时,端口名称保留在寄存器和Windows返回的列表中。 enter image description here