【发布时间】:2018-02-09 18:31:31
【问题描述】:
我有固件升级程序,可通过串行连接更新设备上的软件。这将发送给将执行升级的客户端。在测试中,我发现COM1可以选择,即使没有连接串口线也会打开。 有代码可以检查连接是否打开,也可以捕获异常,但是由于 COM1 正在打开,程序只是继续,尽管没有连接到设备。
如何处理客户端选择错误的 COM 端口?
会提供说明,但让应用处理此问题会让我感觉更安全。
这是我的串口打开代码:
// Create a new SerialPort object.
SerialPort _serialPort;
_serialPort = new SerialPort(comPort, 115200, Parity.Even, 8, StopBits.One);
// for state machine
bool _continue = true;
do
{
try
{
_serialPort.Open();
if (_serialPort.IsOpen)
{
Console.WriteLine("");
Console.WriteLine("Serial Port is Open");
Console.WriteLine("");
}
else
{
MessageBox.Show("Serial Port is not open. Choose another port.");
}
}
catch (UnauthorizedAccessException ex)
{
MessageBox.Show(ex.Message);
}
catch (ArgumentOutOfRangeException ex)
{
MessageBox.Show(ex.Message);
}
catch (ArgumentException ex)
{
MessageBox.Show(ex.Message);
}
catch (IOException ex)
{
MessageBox.Show(ex.Message);
}
catch (InvalidOperationException ex)
{
MessageBox.Show(ex.Message);
}
} while (!_serialPort.IsOpen);
【问题讨论】:
-
不要循环,你会没事的,只要尝试打开端口,如果它抛出异常通知用户并让他选择另一个。
-
另外,我想你有某种形式的协议和某种形式的握手,所以你可以设置一个超时,如果设备在 X 时间内没有响应关闭端口并通知用户。
-
IsOpen 测试永远不会失败,您在此之前调用了 Open。您没有对此进行测试,它根本行不通。串行端口太粗糙,无法进行可靠的“已连接”测试。 DsrHolding 属性可以提供帮助,但不能保证。确保有一个选项菜单允许用户选择正确的端口号。
标签: c# validation serialization input serial-port