c# - 始终打印使用 Zigbee 阅读的最后一条消息
问题描述
我正在使用带有 Zigbee 的 Arduino 从传感器发送数据,并使用带有另一个 Zigbee 的 Raspberry Pi 来读取 10 个字节的数据,其中包含一个头部和一个停止。我在 Windows 10 IoT 上,我使用 VS 2019 进行编码。我的问题是我的 RPI 读取数据但越来越晚,所以我不再实时。我知道问题来自迫使我阅读每条消息的缓冲区,我愿意改变它。我只想读取缓冲区中的最后一条消息,但我不知道该怎么做。我尝试读取的速度比发送数据的速度快,但出错了,我还搜索了如何清空缓冲区,但没有找到。谢谢你的帮助,罗曼。
private async Task<ZigBeeCommResult> Read()
{
var retvalue = new ZigBeeCommResult();
try
{
_dataReader = new DataReader(_zbCoordinator.InputStream);
var numBytesRecvd = await _dataReader.LoadAsync(10);
byte[] data = new byte[10];
retvalue.TextResult = "";
Debug.WriteLine(_dataReader.UnconsumedBufferLength);
while (_dataReader.UnconsumedBufferLength > 0)
{
for (uint j = 0; j < 10; j++)
{
data[j] = _dataReader.ReadByte();
//Debug.WriteLine(data[j]);
retvalue.TextResult += data[j];
}
}
txtHeader.Text = retvalue.TextResult;
}
catch (Exception ex)
{
retvalue.IsSuccessful = false;
retvalue.TextResult = ex.Message;
}
finally
{
if (_dataReader != null)
{
_dataReader.DetachStream();
_dataReader = null;
}
}
return retvalue;
}
和
public void DispatcherTimerReaderSetup()
{
// configure dispatcher
_dispatcherTimerReader = new DispatcherTimer();
_dispatcherTimerReader.Tick += DispatcherTimerReader_Tick;
_dispatcherTimerReader.Interval = new TimeSpan(0, 0, 0, 0, 500);
_dispatcherTimerReader.Start();
}
public void DispatcherTimerReader_Tick(object sender, object e)
{
Read();
}
解决方案
推荐阅读
- java - 如何从 BeanShell 加载文件?
- git - Git 在多个分支中使用 master 的提交
- prolog - 使用 Member 和 Append 在序言中压缩列表
- json - 如何访问嵌套在此 api 响应中的城市名称?
- android - 打开浏览器意图后如何关闭应用程序
- maven - 导入 IntelliJ - 错误包 org.springframework.boot 不存在
- docker - 将文件从容器发送到主机
- java - 杰克逊忽略没有自定义序列化程序的空对象“{}”
- java - 如果字符串在 java 中结束,则删除它
- php - 通过 PHP 从 android 读取字符串返回 'null'