2016-12-15 9 views
0

さまざまなシリアルポート、USB、有線TCP/IP、ワイヤレス(Zigbee、Bluetooth、WIFIなど)を含むさまざまな通信プロトコルで接続されたデバイスがあります。ハードウェアの問題と特定のデバイスのAPIが限られているため、すべてのデバイスが物理的に切断されているか、バッテリ切れのときに、ソフトウェア層に「切断」を報告または通知する機能はありません。ランタイム中に物理デバイスの接続を継続的に監視する

私の回避策は、アプリケーションの起動時とアプリケーションのランタイム全体で、アプリケーションを再起動せずに最大48時間実行される別のスレッドにループを作成することです。このスレッドは、すべてのデバイスが信号をフィードバックするかどうかを継続的にチェックし、そうでない場合は、接続が切断されているとみなし、GUIを更新します。

何堅牢で最良の方法であり、Dispatch.Invokeを上げ最小限のリソース(メモリに)

  1. を取り、その後絶えずのBackgroundWorkerを使用して、フィードバック信号
  2. をチェックし、無限ループを作成しますスレッド。私はプログレスバーにしか使用しておらず、長時間実行するように設計されているかどうかはわかりません。
  3. このような仕事をするためのより良い/標準的な方法がありますか?

答えて

1

現在のデバイスステータスを確認するには、Timerを使用してください。そしてDispatcher.Invoke UIを更新する

+0

私はそれを試して、2時間ごとに私はタスクマネージャーでチェックすると、メモリ使用量が10MB増加しています。だから、私は48時間の実行がメモリ使用量の240メガバイトの増加につながると期待します。 – KMC

+0

@KMCあなたの実装に問題があるかもしれません。好みのメモリプロファイラを使用するか、コードと観測値を使って新しい質問を作成することができます – lerthe61

関連する問題