C#シリアル通信 - 紛失したデータを受信しました
-
03-10-2019 - |
質問
コレクターアレイが追加されるのではなく、コレクターアレイが過剰に書き込まれているため、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
動的データを維持するクラス。つまり、削除などを追加するので、シリアルからデータを受信するたびに、リストに追加するだけです。
所属していません StackOverflow