C# 为什么WMI API和SerialPort类返回端口com的默认配置?

C# 为什么WMI API和SerialPort类返回端口com的默认配置?,c#,serial-port,wmi,device-manager,C#,Serial Port,Wmi,Device Manager,我在设备管理器中更改了端口Com的配置,但我的serialPort类和WMI API类Win32_SerialPortConfiguration继续返回此端口Com的默认配置。 此代码返回在设备管理器中设置的端口com的状态。USB仿真器驱动程序无法正确执行此操作。没关系,你不再使用MS Dos了。请注意,4个数据位不可能是正确的,据我所知,没有UART支持这一点。7或8是正常值。不只是仿真器总是返回默认值,还有类System.IO.Ports.SerialPort。关于配置值,我现在只是为了

我在设备管理器中更改了端口Com的配置,但我的serialPort类和WMI API类Win32_SerialPortConfiguration继续返回此端口Com的默认配置。


此代码返回在设备管理器中设置的端口com的状态。

USB仿真器驱动程序无法正确执行此操作。没关系,你不再使用MS Dos了。请注意,4个数据位不可能是正确的,据我所知,没有UART支持这一点。7或8是正常值。不只是仿真器总是返回默认值,还有类System.IO.Ports.SerialPort。关于配置值,我现在只是为了测试我的代码而更改它们。这是意料之中的,它们看起来完全相同。只是当它是片状的时候不要依赖它。根据仿真器的品牌和型号,您也不能依赖此属性页的可用性。是否有其他选择?当然,请在代码中设置SerialPort属性。您是否可以硬编码它们或者您需要一个配置文件并不明显。通常只需要配置COM端口名,如果您总是与同一类型的设备通话,则其他设置往往不会更改。
 using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Ports"))
         {
             foreach (string name in ndpKey.GetValueNames())
             {
                 if (name.Remove(name.IndexOf(":")).ToLower().Equals(ComName.ToLower()))
                 {
                     var tempArray = ndpKey.GetValue(name).ToString().Split(',');
                     int speed = 0;
                     char parity = ' ';
                     int dataBits = 0;
                     Decimal stopBit = 0;
                     string parityS ="";
                     ComSettings.Add("Name", ComName);
                     if ((Int32.TryParse(tempArray[0], out speed)) && (Int32.TryParse(tempArray[2], out dataBits)) && (Decimal.TryParse(tempArray[3].Replace(".", ","), out stopBit)) && (Char.TryParse(tempArray[1], out parity)))
                     {

                         ComSettings.Add("Speed", speed);
                         ComSettings.Add("DataBits", dataBits);
                         ComSettings.Add("StopBits", stopBit);
                         switch (parity)
                         {
                             case 'e':
                                 parityS = "Even";
                                 break;
                             case 'n':
                                 parityS = "None";
                                 break;
                             case 'o':
                                 parityS = "Odd";
                                 break;
                             case 'm':
                                 parityS = "Mark";
                                 break;
                             case 's':
                                 parityS = "Space";
                                 break;
                         }
                         ComSettings.Add("Parity", parityS);
                     }
                     break;
                 }
             }
         }