デバイスのソフトウェアをシリアル接続でアップデートするファームウェアアップグレードプログラムがあります。これは、アップグレードを実行するクライアントに送信されます。テストでは、シリアルケーブルを接続しなくてもCOM1を選択して開くことができます。 接続が開いているかどうかをチェックし、例外をキャッチするコードがありますが、COM1が開いているので、デバイスに接続していなくてもプログラムは続行されます。アップグレードソフトウェアで間違ったシリアルポートを選択する処理
間違ったCOMポートを選択してクライアントを処理するにはどうすればよいですか?
説明がありますが、この問題がアプリで処理されていると、より安全に感じられます。
はここに私のシリアルポートのオープンコードです:半ば2000年代に
// 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);
ループを実行しても問題はありません。ポートを開こうとすると、例外がスローされた場合にユーザーに通知し、別のポートを選択させてください。 – Gusman
また、何らかの形のハンドシェイクで何らかのプロトコルを使用しているとします。そのため、デバイスがX時間で応答しないとタイムアウトをプログラムできます。ポートを閉じてユーザーに通知します。 – Gusman
IsOpenテストは決して失敗しません。その前にOpenを呼び出しました。あなたはこれをテストしていない、それは単に動作しません。シリアルポートは信頼性の高い「接続された」テストを行うにはあまりにも粗すぎます。 DsrHoldingプロパティは役立ちますが、保証はありません。ユーザーが正しいポート番号を選択できるようにするOptionメニューがあることを確認してください。 –