アプリ版:「スタンプのみでお礼する」機能のリリースについて

Visial Basic 2005 にて SerialPort コンポーネントを使ったアプリを作っています。
当初、Microsoft のサンプルを参考に

SerialPort1.ReadLine

でデータを受信していたのですが、この方法だとバッファ内から再度同じデータを受信してしまうらしく、新しいバッファからデータを受信しないとイベントが発生する毎に古いデータを読み取ってしまいます。

そこで調べていたところ、Microsoft のフォーラムで以下のような Visual C# のソースを見つけました。

(以下引用)
> if (serialPort1.BytesToRead > 0)
> {
> // 受信バッファからデータを取得
> byte[] b = new byte[serialPort1.BytesToRead];
> Read(b, 0, b.Length);
> }

まだ Visial Basic 初心者なもので Byte 型の扱い方や上記ソースは Visial Basic でどのように書けばよいのかわかりません。
どなたかご教授ください。
よろしくお願いいたします。

A 回答 (1件)

こんにちは、もう解決しているかもしれませんが。


ReadLineのヘルプには、
入力バッファ内の NewLine 値まで読み取ります
と記載してあります。Framework2.0からの機能なんですね。

私の場合、データ受信後その内容により返事を返すまでの間
次のデータを受信することは無い場合が多いので
DataReceivedイベントでSerialPort.Readを利用しています。
ReadLineは使用したことが無いのでわかりませんが
Readの場合、読み込んだデータがバッファに残っているということはありません。

この回答への補足

アドバイスありがとうございます。

今のところまだ未解決なのですが、私も miyuyu さんと同じようにデータ受信の内容に応じて返事をするというものを作っています。
問題となっている現象は、二度目のデータ受信時の DataReceived イベント発生の際に一度目に送った返事を即送り出してしまうという感じです。
Write の方のバッファもあやしい気がするのですが、差し支えなければ Read の使い方を教えていただけますと幸いです。

よろしくお願いします。

補足日時:2006/11/22 13:18
    • good
    • 0
この回答へのお礼

SerialPort.ReadLine を使っても、SerialPort.DiscardInBuffer でバッファを削除したら問題なく動作しました。
ありがとうございました。

お礼日時:2006/11/22 23:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A