(六)C# serialPortObj.ReadBufferSize必须设置1024的整数倍,
(六)C# serialPortObj.ReadBufferSize必须设置1024的整数倍,不能设置奇怪的整数,否则导致System.IO.IOException: 数据无效
一、问题
串口缓存器serialPortObj.ReadBufferSize = X,X必须是1024整数倍,不然会发生下面的错误。
System.IO.IOException: 数据无效。
在 System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
在 System.IO.Ports.SerialStream.SetBufferSizes(Int32 readBufferSize, Int32 writeBufferSize)
在 System.IO.Ports.SerialPort.Open()
二、根本原因
System.IO.Ports.SerialPort.ReadBufferSize 属性设置为一个奇怪的整数值,会发生异常。所以,我们不要设置奇怪的整数。
//
// 摘要:
// 获取或设置 System.IO.Ports.SerialPort 输入缓冲区的大小。
//
// 返回结果:
// 缓冲区大小(以字节为单位)。默认值为 4096;最大值为正整数,即 2147483647。
//
// 异常:
// T:System.ArgumentOutOfRangeException:
// System.IO.Ports.SerialPort.ReadBufferSize 设置值小于或等于零。
//
// T:System.InvalidOperationException:
// System.IO.Ports.SerialPort.ReadBufferSize 属性已设置流打开时。
//
// T:System.IO.IOException:
// System.IO.Ports.SerialPort.ReadBufferSize 属性设置为一个奇怪的整数值。
[Browsable(true)]
[DefaultValue(4096)]
[MonitoringDescription("ReadBufferSize")]
public int ReadBufferSize { get; set; }
三、解决办法
设置 bullHeadReceive.serialPortObj.ReadBufferSize = 1024或2048或4096...,就可以解决上面的问题。
(六)C# serialPortObj.ReadBufferSize必须设置1024的整数倍,相关教程