Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#打开虚拟串行端口会引发异常_C#_Windows_Serial Port_Virtual Serial Port_Com0com - Fatal编程技术网

C#打开虚拟串行端口会引发异常

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开头

我有一个通过串口连接到设备的实用程序。 为了测试这个应用程序,我正在为这个设备编写一个模拟器

这两个应用程序都打算在同一台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。