当我进入串行设置时,串行连接关闭。如果我为应用程序中的串行选择错误的波特率,我什至无法进行任何调试,因为它仍在工作,但我不确定它在做什么。
最终,我的问题是如何检查选择的波特率是否正确以及如何确保串行不会冻结我的应用程序。
当我进入串行设置时,串行连接关闭。如果我为应用程序中的串行选择错误的波特率,我什至无法进行任何调试,因为它仍在工作,但我不确定它在做什么。
最终,我的问题是如何检查选择的波特率是否正确以及如何确保串行不会冻结我的应用程序。
我终于让它抛出一个错误。当它试图调用 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。因此,如果您的波特率不正确,您可能会因此得到不正确的数据。