質問

コレクターアレイが追加されるのではなく、コレクターアレイが過剰に書き込まれているため、C#アプリケーションで受信したデータは失われています。

  char[] pUartData_c;

  private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
  {
     try
     {
        pUartData_c = serialPort1.ReadExisting().ToCharArray();
        bUartDataReady_c = true;
     }
     catch ( System.Exception ex )
     {
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
  }

この例では pUartData_c 新しいデータを受信するたびに、過剰に書かれています。一部のシステムでは、データが十分に速く入力されるため、これは問題ではありません。ただし、受信バッファー内の他のシステムでは完了していません。受信したデータをに追加するにはどうすればよいですか pUartData_c, 、それを過剰に書き込むのではなく。 Microsoft Visual C#2008 Express Editionを使用しています。ありがとう。

役に立ちましたか?

解決

private SerialPort sp;
private List<byte> byte_buffer = new List<byte>();    

private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
   byte_buffer.Clear();

   while (sp.BytesToRead > 0)
   {
      byte_buffer.Add((byte)sp.ReadByte());
   }
}

他のヒント

もしも pUartData でした List<char> 入ってくる文字をリストに追加することができます .AddRange().

これがC#のアレイの追加問題であることを知る前に、この質問を2〜3回読まなければなりませんでした。 (当初、これは深刻なシリアルコミュニケーションエラーだと思っていました...笑)

Ok、

aを使用できます List<> また ArrayList 動的データを維持するクラス。つまり、削除などを追加するので、シリアルからデータを受信するたびに、リストに追加するだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top