C#SerialPort GetPortNames不';我不能在windows 10上工作

C#SerialPort GetPortNames不';我不能在windows 10上工作,c#,arduino-uno,serial-communication,C#,Arduino Uno,Serial Communication,一两年前,我在Windows8或Windows8.1中编写了一个简单的程序,在Arduino Uno和我的C#Form应用程序之间提供串行端口连接。首先,我检查了pc中所有打开的com端口,并获取这些端口以供选择连接。要做到这一点,工作代码如下所示: private void portCheck_Click(object sender, EventArgs e) { foreach (string item in System.IO.Ports.Seria

一两年前,我在Windows8或Windows8.1中编写了一个简单的程序,在Arduino Uno和我的C#Form应用程序之间提供串行端口连接。首先,我检查了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); }
            }
        }
我有很长一段时间没有打开这个程序了,现在我格式化了我的计算机,并用Windows10教育进行了一次干净的安装。当我运行这个项目时,我意识到程序没有找到任何打开的com端口。它不进入foreach循环,只是System.IO.Ports.SerialPort.GetPortNames()不返回任何端口名。 我做了一些研究,并在Windows10中读到了类似这种情况的问题。 人们对串行连接给出了完全不同的解决方案。
我不想重写整个项目。有人知道这个问题吗?有什么简单的解决方案吗?

升级到Windows 10后,您确定串行端口本身工作正常吗

  • 它是否出现在设备管理器中
  • 它是否出现在注册表中的
    HKEY\U LOCAL\U MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
    (从何处获取其信息)

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

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

Мy问题(Win10)是,当从USB中删除设备时,相应的端口不会从列表中消失(SerialPort.GetPortNames(),C#) 这是在登记册上保持平衡。 我明白了:

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

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