none
UnauthorizedAccessException例外発生後のSerialPort.Close( ) RRS feed

  • 質問

  • こんにちは。
    どうか教えてください。

    WindowsアプリケーションをVS2005C#で作っています。

    COMポート接続の機器とSerialPortでシリアル通信しているのですが、
    ポートOpenした状態で接続ケーブルを抜き、
    その後SerialPortオブジェクトを操作しようとするとUnauthorizedAccessException例外が発生します。

    新しくSerialPortオブジェクトを作成し再度機器への接続したいので、
    使用したSerialPortオブジェクトが保有するCOMポートへのアクセスを破棄するため、
    UnauthorizedAccessException例外キャッチ後にClose()を行うと、
    これに対してもUnauthorizedAccessException例外が発生してしまいます。

    UnauthorizedAccessException例外発生後、どうしたらアクセス権を破棄させることができるでしょうか。

    お忙しいところすみません。よろしくお願いします。


     

    同文を下記ページにも書き込みましたが、解決できなかったのでコチラに書き込ませてもらいました。

    http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=41268&forum=7&2

    2007年9月20日 5:04

すべての返信

  • SerialPortでそんなexでないけどなぁ、と思って調べていたら、出ました。

    USBにSerialPort変換アダプタをつけて通信している場合に、アダプタごと抜くとそうなります。

    moccoさんもUSBにアダプタつけておられますか?

    で、それがわかったところで私は解決策持っていません。(^^;

    どなたか、よろしく♪

    2007年9月20日 5:59
  • はなはなはなさん、アドバイスありがとうございます!

     

    おっしゃるとおり、SerialPort変換アダプタ経由での接続です。

    SerialPort変換アダプタ特有のエラーなのですね、、

    解決法がどうにも分からないです。。

    2007年9月20日 6:24
  • こんにちは。

    以前同じ目にあったことがあります。
    たぶんSerialPortクラスの実装が、Closeが正常終了しないとリソース解放出来ないんだと思います。

    なにか対策したはずなのですがうろ覚えです。(転職したのでソースはすでにないです)
    UnauthorizedAccessExceptionが発生してからではどうしようもなかった気がします。
    USBのデタッチメッセージを捕まえて、USBシリアル変換ドライバがまだリソースを持ってる間にCloseしたんじゃなかったかと思うんですが・・・それでもだめで、もっと何かしたような気もします。

    役に立たないですね。
    まあ同じ目にあった、という事例の一つとして書いておきます。
    2007年9月20日 10:00
  • Always29 さん、ありがとうございます。

    大変参考になりました!!

     

    なかなか難しい問題なのですね、探っていますが解消できるか心配でなりません。。


    2007年9月21日 8:25
  • AppDomainを作ってその中でシリアル処理を実行して、UnauthorizedAccessExceptionが発生したらAppDomainごと終了破棄してやるとシリアルポートが開放できました。
    発生したらSetDataで終了原因のフラグでもセットしてから終了すればよいかと。
    2007年9月21日 12:43