C# SerialPort.Open throws";传递给系统调用的数据区域太小”;例外

C# SerialPort.Open throws";传递给系统调用的数据区域太小”;例外,c#,.net,serial-port,uart,C#,.net,Serial Port,Uart,我最近遇到了这个问题。我公司开发的软件大量使用System.IO.Ports.SerialPort进行COM端口连接。我们现在有了一台新的嵌入式PC,当我尝试执行SerialPort.Open()时,它抛出一个异常,说“传递给系统调用的数据区域太小” 经过各种测试,我发现其他软件(如Terminal2、Hercules)可以成功地以相同的配置(波特率、奇偶校验等)打开上述COM端口,发送和接收数据,因此我认为.net Framework的串行端口实现出了问题(这在当今并不新鲜) 在设备管理器中,

我最近遇到了这个问题。我公司开发的软件大量使用System.IO.Ports.SerialPort进行COM端口连接。我们现在有了一台新的嵌入式PC,当我尝试执行SerialPort.Open()时,它抛出一个异常,说“传递给系统调用的数据区域太小”

经过各种测试,我发现其他软件(如Terminal2、Hercules)可以成功地以相同的配置(波特率、奇偶校验等)打开上述COM端口,发送和接收数据,因此我认为.net Framework的串行端口实现出了问题(这在当今并不新鲜)

在设备管理器中,这些端口列为“UartSub设备(COMX)”,位置为Intel(R)串行IO UART主机控制器。这是目前与以前的系统(SerialPort工作正常)的唯一区别

有什么建议吗

编辑-为清晰起见,添加代码段

SerialPort SP = new SerialPort(CmbPorts.Text.ToString().Trim(), 
                    115200, Parity.None, 8, StopBits.One);

SP.Handshake = Handshake.None;

SP.Open();
这是StackTrace:

   at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
   at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
   at System.IO.Ports.SerialPort.Open()
   at TestUartCOMPort.Form1.BtnConnect_Click(Object sender, EventArgs e) in C:\Workspace\Projects\TestUartCOMPort\TestUartCOMPort\Form1.cs:line 49

嗯,我以前见过一次。您正在使用虚拟COM端口吗?我记得这发生在一个虚拟com端口上,问题是它没有正确设置(我想可能是波特率问题)。您必须确保用于虚拟COM端口的软件安装正确。不幸的是,在这种情况下没有虚拟COM端口,它只是英特尔驱动程序安装后显示的内容。。还有一个事实是,其他软件可以毫无问题地使用COM端口。您最好的办法是运行调试器,逐步检查代码,并查看错误的确切抛出位置。您可以尝试在兼容模式下运行该程序。我觉得这是一个线程问题,但由于你没有发布任何代码,我真的帮不了你。我在原始帖子中添加了一个代码片段。这是在UI线程中调用的,没有其他线程,因为此应用程序只是用于测试是否可以打开该COM端口。兼容模式引发相同的异常,引发异常的点是SP.Open();无论如何谢谢你的帮助!看见