C# 升级软件中选择错误串口的处理
我有固件升级程序,通过串行连接更新设备上的软件。这将发送给将执行升级的客户端。在测试中,我发现可以选择COM1,即使没有连接串行电缆,它也会打开。 有代码可以检查连接是否打开,也可以捕获异常,但由于COM1正在打开,尽管没有连接到设备,程序仍将继续 如何处理选择了错误COM端口的客户端? 将提供说明,但我觉得由应用程序处理此问题更安全 这是我的串行端口打开代码:C# 升级软件中选择错误串口的处理,c#,validation,serialization,input,serial-port,C#,Validation,Serialization,Input,Serial Port,我有固件升级程序,通过串行连接更新设备上的软件。这将发送给将执行升级的客户端。在测试中,我发现可以选择COM1,即使没有连接串行电缆,它也会打开。 有代码可以检查连接是否打开,也可以捕获异常,但由于COM1正在打开,尽管没有连接到设备,程序仍将继续 如何处理选择了错误COM端口的客户端? 将提供说明,但我觉得由应用程序处理此问题更安全 这是我的串行端口打开代码: // Create a new SerialPort object. SerialPort _serialPort;
// 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);
2000年代中期,我与一家为GPS设备编程的公司合作。我们通过USB到串行通信对其进行编程,因为我们必须一次性对大量设备进行编程。设备本身具有发送请求/响应类型消息的方法,因此我们可以查看连接到设备的端口。我会看看你正在编程的设备,看看它是否有这个概念。如果是这样,您可以在上迭代机器上的任何串行端口,并通知用户这些端口上有哪些设备 如果用户可以使用USB-to-serial设备,它会变得有点棘手,因为USB设备不会在每次启动时以相同的顺序发现。我们的解决方案是检查连接到USB端口的设备,寻找USB到串行设备。这有点粗糙,因为您检查设备信息以确定它是USB到串行的,然后迭代串行端口。我们使用了多个连接到USB的8端口和16端口设备
希望这能有所帮助。在21世纪中期,我与一家为GPS设备编程的公司合作。我们通过USB到串行通信对其进行编程,因为我们必须一次性对大量设备进行编程。设备本身具有发送请求/响应类型消息的方法,因此我们可以查看连接到设备的端口。我会看看你正在编程的设备,看看它是否有这个概念。如果是这样,您可以在上迭代机器上的任何串行端口,并通知用户这些端口上有哪些设备 如果用户可以使用USB-to-serial设备,它会变得有点棘手,因为USB设备不会在每次启动时以相同的顺序发现。我们的解决方案是检查连接到USB端口的设备,寻找USB到串行设备。这有点粗糙,因为您检查设备信息以确定它是USB到串行的,然后迭代串行端口。我们使用了多个连接到USB的8端口和16端口设备
希望这能有所帮助。不要循环,你会没事的,只要尝试打开端口,如果它引发异常,请通知用户并让他选择另一个。此外,我假设你有某种形式的协议和某种形式的握手,因此你可以编程超时,如果设备在X时间内没有应答,关闭端口并通知用户。IsOpen测试从未失败,在此之前您调用了Open。你没有测试这个,它根本不起作用。串行端口太粗糙,无法进行可靠的“已连接”测试。DsrHolding属性可以提供帮助,但不能保证。确保有一个选项菜单,允许用户选择正确的端口号。不要循环,你会没事的,只要尝试打开端口,如果它引发异常,通知用户并让他选择另一个。此外,我假设你有某种形式的协议,通过某种形式的握手,你可以编程超时,如果设备在X时间内没有应答,关闭端口并通知用户。IsOpen测试从未失败,在此之前您调用了Open。你没有测试这个,它根本不起作用。串行端口太粗糙,无法进行可靠的“已连接”测试。DsrHolding属性可以提供帮助,但不能保证。确保具有允许用户选择正确端口号的选项菜单。