开发框架是 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 红包感谢。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.