-1

1 つのシリアルポートからデータを読み取る必要がある UserControl プログラムがいくつかあります。私が持っているいくつかのプログラムが含まれています:

  • 対気速度、ソナー、緯度、経度など。テキストボックスに表示される値
  • オブジェクト回避表示
  • GPSマップ

メインフォームにボタンがあり、クリックするとシリアルポートが開き、ユーザーコントロールがデータを読み取って表示する必要がありますが、その方法がわかりません。

私の異なるユーザーコントロールが1つのシリアルポートからデータを読み取る方法を知っている人はいますか? またはおそらく私が読むことができるいくつかのウェブサイトのリンク。ありがとうございました!

4

1 に答える 1

1

1つのソース(シリアルポート)と多くのコンシューマー(ユーザーコントロール)がある場合。次に、間接参照の別のレイヤーを追加する必要があります。シリアルポートクラスの所有者であるクラスを作成し、そこからすべてのデータをある種のバッファに読み込みます(DataReceivedイベントに反応し、新しいデータをリスト、キューなどに入れます)。このバッファはこのクラスから公開され、さらに独自のイベントがあります(DataReceived?)。これで、すべてのコンシューマーがこのイベントをリッスンし、バッファーを調べて目的のデータを見つけることができます。

主な問題は、共有バッファーからデータを削除することです。これは、バッファー全体が必要か、バッファーの一部のみが必要かは、コンシューマーによって異なるためです。各コンシューマーがどの時点からバッファー内でのみ機能するかをプロデューサーに通知し、全員がバッファーの先頭を超えた場合にプロデューサーにバッファーを削減させる方法について考えてみてください。ただし、インデックスが変更されたことを消費者に再通知する必要があることに注意してください。

また、すべてのコンシューマーがデータを受信するたびに独自のローカルバッファーを作成し、その場合、すべてのコンシューマーが必要に応じて独自のバッファーを削減できる場合は、共有バッファーが大きくなるという問題を回避できます。

アプリケーション全体のメモリフットプリントを小さくするために最初のアプローチの複雑さが必要な場合、どちらの戦略がより理にかなっているのかは状況によって異なります。

于 2012-08-02T10:34:50.720 に答える