C#SerialPort#Open()方法因为端口名而抛出ArgumentException?

在我的本地机器上,

  • Windows XP
  • 端口(COM和LPT)
    • COM3
    • RIM虚拟串行端口v2(COM4)
    • RIM虚拟串行端口v2(COM5)

以下代码,

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO.Ports; using System.Threading; namespace OpenSerialPortTest { class Test { static void Main(string[] args) { foreach (String serialPortName in SerialPort.GetPortNames()) { SerialPort serialPort = new SerialPort(serialPortName); try { serialPort.Open(); // Line 19 Console.WriteLine(serialPort.PortName); } catch (Exception ex1) { Console.WriteLine(ex1); try { serialPort.Close(); } catch (Exception ex2) { Console.WriteLine(ex2); } } } Console.ReadLine(); } } } 

将抛出以下ArgumentException

在此处输入图像描述

那是,

给定的端口名称不以COM / com开头,也不会解析为有效的串行端口。

有人知道为什么会这样吗?

看看http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/35954173-2eeb-46af-bb3e-86840c6b5484

似乎问题是那些COM端口被映射到其他东西并在响应中给出了这个奇怪的错误。

我有完全相同的问题。 我发现我有一个Windows打印机设置使用相同的端口。 一旦我在打印机设置中更改了端口,SerialPort.Open()就可以工作了。