我的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。感谢。
答案 0 :(得分:1)
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());
}
}
答案 1 :(得分:0)
如果pUartData
是List<char>
,您可以使用.AddRange()
将传入的字符添加到列表中。
答案 2 :(得分:0)
在我知道这只是c#中的数组追加问题之前,我必须阅读这个问题2-3次。 (最初我认为这是一个严重的串行通信错误...大声笑)
确定,
您可以使用List<>
或ArrayList
类来维护动态数据。即添加删除等
因此,每次从串行接收数据时,只需将其添加到列表中即可。