问题描述
好久没问了。
我正在开发一个通过蓝牙与设备通信的应用。 通信有效,但我不喜欢我糟糕的接收编码,需要一些帮助才能找到使其更稳定和可靠的方法。
我连接的设备发送起始位、消息和结束位。 每个消息(开始、消息和结束位)总是一个字节,但消息可以从 1 到 6 个消息不等,例如:
- 开始位
- 消息位
- 消息位
- 消息位
- 结束位
所以,现在我在发送命令后使用 await Task.Delay:
SendCommand() {
outStream.Write(TxBuffer,TxBuffer.Length);
await Task.Delay(200);
}
当我从我的设备接收消息时,我使用 ProcessBuffer (InputStreamInvoker)
public async void ProcessBuffer(byte[] data)
将所有消息存储在一个 Ilist 中,然后当等待结束时,它从 Ilist 中读取。
此代码发送命令从设备读取参数:
await SystReadpgmParam(address,1)
if (responseAwaited.Count > 0)
{
// Do whatever with the response
}
SystReadpgmparam() 编译消息,然后调用包含 await Task.Delay(200) 的 SendCommand()。这有很多不好的地方:
- 延迟始终设置为 200,即使消息是一位 使通信变慢。
- 即使通信以这种方式进行,在读取开始之前响应未完成的可能性也很大。
我想要等待 ProcessBuffer() 完成的东西,以便我确定我总是收到正确的响应。
ReadWord(address) {
SystReadpgmParam(address,1);
/*
How to process the response from list?
*/
}
SystReadpgmParam(address,1) {
SendCommand(); // All response from device go through ProcessBuffer()
}
ProcessBuffer() {
// Collects all information from device in a list (reads start,end and message bit)
}
我希望我解释了我在找什么:) 谢谢各位!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)