.NET SerialPortクラスを使用してシリアルポートからデータを読み取る方法について多くの質問を読んだことがありますが、推奨される方法はどれも完全に効率的であるとは証明されていません。ここで.NETフレームワークを使用してシリアルポートを読み取る正しい方法は何ですか?
は、私は今のところ使用していますコードです:
SerialPort port = new SerialPort("COM1");
port.DataReceived += new SerialDataReceivedEventHandler(MyDataReceivedHandler);
そしてイベントハンドラ:
void MyDataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
int count = port.BytesToRead;
byte[] ByteArray = new byte[count];
port.Read(ByteArray, 0, count);
}
しかし、私はまだ時々、いくつかのデータが不足しています。私は、イベントハンドラでデータを読み込む別の方法を試みたが運がない。
.NET 4.5では、SerialPortストリームで使用可能なようなReadAsyncメソッドのように、非同期タスクを実行する可能性が新たに浮かび上がってきたため、これらのケースを処理するにはどのような方法が推奨されているのでしょうか。
あなたの質問は本当に曖昧です。 「私はまだ時々データが欠けています」ということは、あなたのメカニックに「私の車は時々面白い音を出す」と言って、修正するのにどれくらいの費用がかかるかを尋ねるようなものです。関連する質問におそらく[この回答](http://stackoverflow.com/a/2966357/62576)が役立つかもしれません。しかし、助けが必要な場合は、もっと具体的にする必要があると思います。そうであるように、このトピックに関する他の質問を見ても答えられないものはあまりありません。 –
あなたは正しいと思いますが、実際の例をあわせて見てみましょう。 –
RS232または485でシリアル通信プロトコルを実装するのは本当に難しい作業です。それは多くの経験が必要です。私は良い古いDOS時代からこれを実装してきましたが、いくつかの一般的な落とし穴にはまっています。シリアル通信を扱う信頼できるサードパーティーの製品を探してみませんか?彼らはおそらくあなた自身に落ちる多くのバグ、多くのバグ、多くのバグを洗い流しているでしょう:-)これが練習であれば、ついにはシリアルコミュニケーションをマスターすることに大きな満足をもたらします! :-) – Loudenvier