我在这里阅读了一些建议与port.BaseStream.ReadAsync()waith async/await 一起使用的线程。我不清楚实施此操作的最佳方法是什么?
我是否仍然使用 event_handler 并将其设为异步/可等待?
private async void myPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] buffer = new byte[myPort.BytesToRead];
await (myPort.BaseStream.ReadAsync(buffer, 0, buffer.Length));
}
Run Code Online (Sandbox Code Playgroud)
或者事件处理程序是否完全被忽略,而是我在循环中调用 ReadAsync?
编辑:解析后,我将 1) 将数据发送到 TCP 服务器,2) 将其写入 sq3lite 数据库。
我有一个任务来计算它从某个来源接收到的数据包数量。
每 250 毫秒一个计时器启动读取并将计数输出给用户。在我需要将计数设置回 0 之后。
我担心的是,在读取和显示计数之间,但在我设置计数 = 0 之前,计数在另一个线程中增加了,所以我最终通过将其归零来丢失计数。
我是线程的新手,所以我有多种选择。
我研究过使用 Interlocked 但据我所知它只给我算术运算,我没有选择将变量实际设置为值。
我也在研究 ReaderWriterLockSlim,我需要的是最有效/更少开销的方法来完成,因为有很多数据来了。