当错误的波特率选择c#时,应用程序冻结

本文关键字:应用程序 冻结 选择 错误 波特率 | 更新日期: 2023-09-27 18:09:05

当我进入串行设置时,串行连接已关闭。如果我选择了错误的波特率的串行进入应用程序冻结,我甚至不能得到任何调试,因为它仍在工作,但我不确定它在做什么。

最后,我的问题是如何检查所选择的波特率是否正确,以及如何确保串行不冻结我的应用程序。

当错误的波特率选择c#时,应用程序冻结

我终于让它抛出了一个错误。当它试图调用sp.ReadLine();它说ReadLine()已经超时。我的超时时间是500。

我刚才用了:

try {
  data = sp.Readline();
}
catch (TimeoutException errorEvent)
{
  //Write to console the errorEvent (This operation has timed out)
  //Message to user to pick correct baud
  tbConsole.AppendText(Environment.NewLine);
  tbConsole.AppendText("Incorrect Baud Rate: Please select a new baud rate");
  tbConsole.AppendText(Environment.NewLine);
  tbConsole.AppendText(errorEvent.Message);
  tbConsole.ScrollToEnd();
  //Show baud rate settings dialog
}

不幸的是,选择错误的波特率是一个PEBKAC,因为如果你允许用户选择它,你无法阻止用户做错误的事情。

我认为确保他们选择正确波特率的唯一真正方法是,如果你可以控制硬件,不要让他们选择,让他们选择他们正在使用的硬件并配置波特率,dts, xon等,而不是让他们指定。

如果我没记错的话,SerialPort在另一个线程上运行,并将事件发送回您的UI。所以如果你的波特率不正确,你可能会因此得到不正确的数据。