.NET SerialPort の IsOpen()メソッドですが、
シリアルポートがすでにオープンしているかどうかを
調べるために使用すると思うのですが、
ちゃんと検出してくれないときがあります。
例えば、COM1 を別のアプリケーションで使用(オープン)しているときに、
IsOpen()を使用すると、false(クロース状態)で返します。
-- 別のアプリケーションで COM1オープン中 --
if( serialPort1->IsOpen::get() == false ){ // ここでは false が返る
serialPort1->Open();
}
よって、続けて Open()メソッドを実行すると以下のエラーが出ます。
----------------------------------------------------------------
'System.UnauthorizedAccessException' のハンドルされていない例外が System.dll で発生しました。
追加情報: ポート 'COM1' へのアクセスが拒否されました。
----------------------------------------------------------------
ところが、COM1がクローズされている状態で Open()メソッドを実行し、
IsOpen()で状態を見ると、ちゃんと true(オープン状態)で返してくれます。
-- COM1クローズ中 --
serialPort1->Open();
if( serialPort1->IsOpen::get() == false ){ // ここでは true が返る
serialPort1->Open();
}
解決方法がわからないので、.NET SerialPort 今は使用しないことにします。
シリアル通信は、CreateFile() を使用しようと思います。
0 件のコメント:
コメントを投稿