如何刷新SerialDevice的输入缓冲区

蒂姆·库尔特(Tim Coulter)

我正在创建一个UWP应用程序,该应用程序需要通过它公开的虚拟串行端口从USB输入设备读取数据。

我已经使用本教程使用SerialCommunication.SerialDevice该类来实现一个可行的原型但是,我需要在第一次打开串行端口时刷新输入流,以丢弃应用程序连接到输入设备之前可能在输入设备的缓冲区中的所有不需要的数据。

显而易见的解决方案似乎是继续读取端口,直到没有剩余可读取的内容为止。像这样的东西:

uint bytes;

do
{
    bytes = await _dataReader.LoadAsync(ReadBufferLength);
    _dataReader.ReadString(bytes);
} while (bytes > 0);

但是,这不起作用,因为LoadAsync()如果没有要读取的数据将无限期等待。

有没有办法在尝试读取输入流之前查询输入流的内容,或者无条件刷新该输入流?

谢谢你的建议

提姆

更新:为了响应@Hans Passant的评论,我对代码进行了如下修改,以在尝试读取输入缓冲区之前检测其内容:

await Task.Delay(1000);
Debug.WriteLine("BytesReceived: {0}", _serialDevice.BytesReceived); // 0 bytes
var bytesRead = await _dataReader.LoadAsync(ReadBufferLength);
Debug.WriteLine("BytesRead: {0}", bytesRead); // 75 bytes

因此,尽管等待了1000毫秒(以便让设备有足够的时间发送其缓冲区中的内容),但仍BytesReceived无法检测到任何数据,但LoadAsync此后立即读取了75个字节。

杰基

在收到一个或多个字节之前,DataReader.LoadAsync()不会返回。如果您的输入缓冲区为空,它将阻止您的代码。

您可以使用CancellationToken取消读取任务,以便“刷新”串行输入缓冲区。

下面是实现此目的的代码。

using (var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(1000)))
{
     await dataReaderObject.LoadAsync(1024).AsTask(cts.Token);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

缓冲区何时刷新

来自分类Dev

C ++刷新缓冲区

来自分类Dev

如何“刷新” TCP客户端缓冲区?

来自分类Dev

如何正确刷新 PHP 输出缓冲区?

来自分类Dev

超出 ConcurrentWebSocketSessionDecorator bufferSizeLimit 时如何刷新缓冲区?

来自分类Dev

如何让 cout 缓冲区在 ubuntu 上刷新

来自分类Dev

如何使用Directx读取hdmi输入帧缓冲区?

来自分类Dev

GNU Radio 输入和输出缓冲区如何工作?

来自分类Dev

读取c中的输入后如何清除缓冲区?

来自分类Dev

如何检查输入缓冲区是否为空?

来自分类Dev

如何为 lex 和 yacc 指定输入缓冲区?

来自分类Dev

输出缓冲区是否自动刷新?

来自分类Dev

结束是否刷新缓冲区

来自分类Dev

输出缓冲区是否自动刷新?

来自分类Dev

刷新TCP接收数据缓冲区?

来自分类Dev

刷新'tail -f'缓冲区?

来自分类Dev

刷新Twisted的写缓冲区

来自分类Dev

内核缓冲区的后台刷新

来自分类Dev

刷新输入缓冲区中的所有其他字符

来自分类Dev

输入无效条目时刷新scanf缓冲区的好方法

来自分类Dev

Python:清除标准输入缓冲区

来自分类Dev

缓冲区溢出的参数输入

来自分类Dev

从 SuperpoweredAndroidAudioIO 输入读取缓冲区?

来自分类Dev

emacs如何刷新缓冲区并保留突出显示-特别是对于日志

来自分类Dev

如何关闭websocket,例如chrome窗口是否正在关闭以将缓冲区刷新为0

来自分类Dev

emacs如何刷新缓冲区并保留突出显示-特别是对于日志

来自分类Dev

如何在缓冲区/窗口焦点上自动刷新Vim?

来自分类Dev

谷歌大查询 - 从缓冲区刷新数据(缓冲区上的 4 天数据)

来自分类Dev

在Apache / Nginx设置中刷新输出缓冲区

Related 相关文章

热门标签

归档