我正在开发一个 WPF 应用程序,它与我的 ELM327 交互。它通过蓝牙连接到我的电脑,并且能够成功建立它。
当我一次手动发送一个命令(例如“010C\r”)时,它会正确地返回我汽车的转速(“010C\r41 0C 0C 30 \r”)。
然后我尝试每三秒发送一次命令。第一次,它有时会工作,如果第二次发送,ELM327 什么也不返回。如果我逐步调试它,ELM 会正确返回值而不会出现任何错误。我认为读者正在阅读响应,在 ELM 有时间发送之前。
循环:
private async Task InitializeElm327()
{
string answer = string.Empty;
tbx_dump.Text += "\n\nSetting up Reader and Writer";
SetupReaderWriter();
tbx_dump.Text += "\nReader and Writer setup finished";
while (true)
{
int revs = await GetRPM();
tbx_revs.Text = revs.ToString();
System.Threading.Thread.Sleep(3000);
}
}
返回 RPM 的函数:
private async Task<int> GetRPM()
{
string cmdAnswer = await SendCommand("010C\r");
int rpm = ConvertRPM(cmdAnswer);
return rpm;
}
发送命令的函数:
private async Task<string> SendCommand(string command)
{
tbx_dump.Text += "\n\nSending command " + command + " to Elm327";
m_dataWriter.WriteString(command);
await m_dataWriter.StoreAsync();
await m_dataWriter.FlushAsync();
uint count = await m_dataReader.LoadAsync(512);
return m_dataReader.ReadString(count).Trim('>');
}
有没有办法防止这种情况发生?