我最近遇到了这个问题。我公司开发的软件大量使用System.IO.Ports.SerialPort进行COM端口连接。现在,我们正在使用一台新的嵌入式PC,当我尝试执行SerialPort.Open()时,它将引发异常,指出“传递给系统调用的数据区域太小”。
经过各种测试,我发现其他软件(例如Terminal2,Hercules)可以使用相同的配置(波特率,奇偶校验等)成功打开所述COM端口,发送和接收数据,所以我认为这有问题.net Framework的SerialPort实现(在阳光下没什么新东西)。
在设备管理器中,这些端口被列为“ 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