2013-11-21 44 views
5

このサイトのこのバージョンのバージョンと、USBシリアルアダプタの問題の詳細と、他人のアプリケーションでの物理的切断を処理しているバージョンがあります。私はそれらの議論のいくつかを見直し、成功なしに様々な提案を試みました。たぶん私は何かを見逃しているかもしれないが、おそらく私はそうではない。この時点で、私はいくつのアイテムを試しているのか分からず、古いアイテムを再ハッシュするのではなく、この投稿から新鮮なものを始めようとしています。物理的に切断されているUSBシリアルアダプタの検出

ほとんどの元の投稿のうち、少なくとも過去1年以内の最新のものを集計すると、USBシリアルアダプタのWindows /開発処理に問題があることが判明しています。ポスト/ソリューションの中には、シリアルポートを閉じて.NET 4.0でこれを解決する予定の未処理の/ uncatchable例外を中心とするものがあります。これはイベント/例外が捕捉されることを可能にします。

私はCOMポートを開き、ビルトインSERIALPORTクラスを使用してデータをリッスンC#で書かれた.NET 4.0 Serviceアプリケーションを持っている:私はやって経験しています何

はこれです。このデータは、おそらく他のローカルアプリケーションに、または他の場所にリモートで報告されます。私はTripp Lite USB to Serial Portアダプタを使ってテストしていますが、問題の実際の報告は、内部USBからシリアルポートへのアダプタデバイスを持つラップトップを使用している人が、時々 "切断"と "再接続" Windows OSにインストールします。 Windowsサービスアプリケーションでポートが開いている間にUSBデバイスを物理的に切断して、デバイスに問題が発生しているかどうかをシミュレートしています。

私のテスト/デバッグで見ていることは、USBデバイスの切断や再接続に反応しないことです。私はデータを受信して​​おり、そのデータの流れはサービスアプリケーションに止まるだけです。デバイスに再接続すると、COMポートはまだアプリケーションに対して開いていますが、新しいデータはありません。ポートを閉じると、「アプリケーションの暴走」/ UnhandledExceptionエラーは発生しません。ポートが閉じてアプリケーションが正常に停止します。いつの間にか、私は何が起こって見たいと思っているキャッチ可能な例外を受け取りますか?アプリケーションを起動すると、データが再び流れ始めます。

USBシリアル/ COMポートがシステムから削除されたことをアプリケーションが知りたい場合は、SerialPortレベルで何らかの例外を除いて、例外を捕捉し、ポートを閉じて「再オープンデバイスがPCに「再接続」されるまで「ポートモード」を選択します。これはSerialPortクラスの周りでこのように可能になるのでしょうか?「シリアルポート」が切断されるのではなく、一般的な「USBデバイス」を中心としたソリューションを切り離す必要がありますか? (私のアプリケーションでは、デバイスがUSBデバイスであることをプログラマティックに判断し、後者の準備としてフラグを立てる必要はありません...............)

ありがとう、 マーク

+0

私が発見したこと:USBシリアルアダプタを切断してサービスアプリケーションを停止すると、SerialPort.IsOpenの値がfalseに設定され、何かが切断を検出してシリアルポートを閉じていることがわかります4.0修正??)。しかし、私はIsOpenフラグの変更が発生したときにキャッチするとは決して決めていません。 Close()をオーバーライドしていますが、切断時に呼び出されることはありません。 –

答えて

0

シリアル経由で通信しているデバイスとは何ですか?ハンドシェイク/ステータス要求を送信するためのサポートはありますか?もしそうなら、それを断続的にポーリングして、デバイスがまだそこにあることを確認し、タイムアウト後に何も戻ってこない場合は、例外を自分で引き上げることができますか?

また、これまでにlibraryを使用していたので、Windowsデバイスマネージャーと対話することができます。この記事では、デバイスの変更を監視するためにクラスを拡張する方法についていくつかの詳細を説明します。これを実装することができます。デバイスが短時間切断されるとイベントが発生します。継続的なポーリングよりも、可能ですか?

関連する問題