C#打开虚拟串行端口会引发异常
我有一个通过串口连接到设备的实用程序。 为了测试这个应用程序,我正在为这个设备编写一个模拟器 这两个应用程序都打算在同一台Windows 7计算机上运行 我正在用C语言编写模拟器。 我使用com0com创建了一对虚拟端口(在本例中为-CNCA8和CNCB8,因为我已经有多对虚拟端口) 我试图在模拟器中打开CNCB8(应用程序尚未运行),但出现了一个异常: System.dll中发生类型为“System.ArgumentException”的未处理异常 其他信息:给定的端口名不以COM/COM开头,或者未解析为有效的串行端口 示例代码:C#打开虚拟串行端口会引发异常,c#,windows,serial-port,virtual-serial-port,com0com,C#,Windows,Serial Port,Virtual Serial Port,Com0com,我有一个通过串口连接到设备的实用程序。 为了测试这个应用程序,我正在为这个设备编写一个模拟器 这两个应用程序都打算在同一台Windows 7计算机上运行 我正在用C语言编写模拟器。 我使用com0com创建了一对虚拟端口(在本例中为-CNCA8和CNCB8,因为我已经有多对虚拟端口) 我试图在模拟器中打开CNCB8(应用程序尚未运行),但出现了一个异常: System.dll中发生类型为“System.ArgumentException”的未处理异常 其他信息:给定的端口名不以COM/COM开头
SerialPort port = new SerialPort("CNCB8", 9600, Parity.None, 8, StopBits.One);
port.Handshake = Handshake.None;
port.Open();
这个问题与此无关,因为它是一个未使用的虚拟端口(如果有问题,IsOpen将返回false):
编辑:我还确保端口名出现在SerialPort.GetPortNames()中,并出现在WIndows“设备管理器”的“com0com串行端口模拟器”下。我还尝试使用CNCA而不是B(有几个不同的现有虚拟端口),尝试删除“握手”行,并尝试将波特率更改为115200,以防万一(尽管最终我需要9600)。Com0com允许您编辑端口名。如果你将你的配对重命名为COM10和COM11,这种情况还会发生吗
另外,端口是否真的处于活动状态?在Windows Server 2008 R2上,我们必须发出Com0com自述文件提到的bcdedit命令,因为操作系统不信任设备驱动程序。从.NET Framework 4.7.2开始,
SerialPort
类创建了一个SerialStream
实例,该实例的构造函数中包含以下代码:
if (portName == null || !portName.StartsWith("COM", StringComparison.OrdinalIgnoreCase))
throw new ArgumentException(...)
悲伤,真的。。。由于调用静态方法SerialPort.GetPortNames()
会愉快地返回字符串数组{“COM1”、“CNCA0”、“CNCB0”}
我的解决方案与Ian Millers的答案一样,是重命名虚拟COM端口。
为此,我打电话
setupc.exe change CNCA0 Portame=COM8
setupc.exe change CNCB0 Portame=COM9
安装com0com后。+1-在我阅读您的答案前两分钟,我将端口重命名为COM13和COM14,它工作正常。。。我仍然想知道为什么它对CNC端口名不起作用,所以我会让这个问题更开放一些。如果我不能得到CNC的答案,我会选择你的答案。谢谢,我在什么地方读过?内部SerialStream类要求串行端口名以“COM”开头。检查Microsoft Connect。