今までは、データを送る必要があるときに開き、すぐに閉じていました。ランダムな「ポートへのアクセス」エラーが発生するため(使用後は常にポートを閉じますが)、常に開いたままにしておくことを考えていました。
毎分または 2 分ごとに COM ポートでデータを送信する必要があると仮定すると、どのような使用方法が適切でしょうか?
ありがとう..
今までは、データを送る必要があるときに開き、すぐに閉じていました。ランダムな「ポートへのアクセス」エラーが発生するため(使用後は常にポートを閉じますが)、常に開いたままにしておくことを考えていました。
毎分または 2 分ごとに COM ポートでデータを送信する必要があると仮定すると、どのような使用方法が適切でしょうか?
ありがとう..
SerialPort.Close() を頻繁に呼び出すのは間違いです。別のアプリにポートを奪われることは、あまり望ましいことではありません。しかし、もっと問題があり、あなたが抱えている問題は、Close() が SerialPort によって開始されたワーカー スレッドが終了するのを待たないことです。そのワーカー スレッドは、DataReceived、PinChanged、および ErrorReceived イベントを発生させます。終了するまでに「しばらく」時間がかかり、ミリ秒から数秒かかる場合があります。Open() を再度呼び出すと、それが完了するまで失敗します。
これはクラスの欠陥ですが、シリアル ポートの一般的な使用法によって引き起こされます。アプリは通常、アプリが終了するまでそれらを閉じません。never を含めて、一般的なデッドロック シナリオを回避します。Close に関するMSDN の記事では、次のように警告されていることに注意してください。
ポートがすぐに閉じられない可能性があるため、アプリケーションのベスト プラクティスは、Close メソッドを呼び出した後、Open メソッドを呼び出す前にしばらく待機することです。
シリアルポートを開いたままにしても害はほとんどないので、開いたままにしておいてください。開いたり閉じたりするオーバーヘッドを節約できます。