题
收到的数据在我的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
, 而不是在写。我使用微软视C#2008年表达的版本。谢谢。
解决方案
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()
.
我不得不读这个问题2-3倍之前我就知道,这只是阵列追加的问题。(一开始我以为这是一个严重的串行通信的错误...笑)
Ok,
你可以使用 List<>
或 ArrayList
类维持的动态数据。i。e加删除等。所以每次你收到的数据序列,只是添加到名单。
不隶属于 StackOverflow