开发框架是 Avaloina 11.2.2 + .NET 8.0 ,包是 System.IO.Ports 9.0.0-preview
问题描述:电脑通过串口读取硬件的数据,设备会连续不断返回数据,如果设备每秒返回 50 次数据,软件就不会闪退。如果设备返回数据的速度超过 200 次每秒,就有一定的概率会出现闪退的问题,闪退的频率大概就是 1-2 小时出现一次,偶尔会 10 分钟内连续出现两次。我换过不同的设备,只要是读取速度过快,都会出现相同的问题。
读取数据的代码片段是:
_serialPort = new SerialPort(); _serialPort.Parity = Parity.None; _serialPort.DataBits = 8; _serialPort.StopBits = StopBits.One; _serialPort.RtsEnable = true; _serialPort.Handshake = Handshake.None; _serialPort.ReadTimeout = 5; _serialPort.WriteTimeout = 5; _serialPort.ReceivedBytesThreshold = 1; _serialPort.DataReceived += OnSerialDataReceived; private async void OnSerialDataReceived(object sender, SerialDataReceivedEventArgs e){ var buffer = new byte[512]; // 最多读 10 字节 int numRead = await _serialPort.BaseStream.ReadAsync(buffer, 0, buffer.Length); } 闪退的时候报错信息:
[06/02/2025 01:20:02] InvalidOperationException: Argument_NativeOverlappedAlreadyFree at System.Threading.ThreadPoolBoundHandle.OnNativeIOCompleted(IntPtr instance, IntPtr context, IntPtr overlappedPtr, UInt32 ioResult, UIntPtr numberOfBytesTransferred, IntPtr ioPtr) 第一个帮助我解决问题的小伙伴,200 红包感谢。
