4

COM ポートにデータを送信し、返されたデータを受信するアプリケーションを作成しました。

送信はうまくいきますが、受信はうまくいきません。複数行および読み取り専用テキスト ボックスの改行文字が正しくありません。

スクリーンショット:

ここに画像の説明を入力

受け取るための私のコードは次のとおりです。

void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e)
{
    byte[] data = new byte[_serialPort.BytesToRead];
    _serialPort.Read(data, 0, data.Length);

    string str = System.Text.Encoding.UTF8.GetString(data);

    textBox3.Text = textBox3.Text + str;

    textBox3.SelectionStart = textBox3.TextLength;
    textBox3.ScrollToCaret();
}

ポートを開く前に、New Line プロパティを \r\n に設定しています。

_serialPort.NewLine = "\r\n";

これを修正する方法は?

4

3 に答える 3

4

ドキュメントから:

ReadLine および WriteLine メソッドの呼び出しの終了を解釈するために使用される値を取得または設定します。

ここで重要なのは、呼び出しの終了を設定するためではなく、解釈するために使用されることです。

NewLine プロパティは、SerialPort オブジェクトが着信データを解釈しようとする方法を処理します。受信データを操作しません。

つまり、NewLine プロパティを "\r\n" に設定することで、"\r\n" を検索し、それをNewLine 文字として使用するように指示します。

シリアルポートに入ってくるデータはそのままです。他のユーザーがデータを送信する方法を変更することはできません。(そのアプリも作成しない限り。)SerialPortにデータを適切に読み取ろうとする方法を伝えることしかできません。

あなたがする必要があるのは、プログラムが何を送信しているかを把握し、.NewLine プロパティをそれに設定することです。ほとんどの場合、「\n」または「\r」のみを送信しているだけなので、NewLIne プロパティを一致するように設定すると、プログラムは送信された改行文字を適切に認識し始めます。

SerialPort.ReadLine プロパティの使用法に役立つ情報がもう少しあります。

于 2012-12-21T15:11:44.020 に答える
2

解決策は次のとおりです。

textBox3.Text = textBox3.Text + str.Replace("\r", "\r\n");
于 2012-12-21T20:16:50.873 に答える
1

これを試して:

_serialPort.NewLine = Environment.NewLine;
于 2012-12-21T15:10:56.953 に答える