我不知道这是否是使用堆栈完成此任务的好方法,但我确信有更快的方法......我从微控制器获取数据,但数据长度并不总是相同的长度。我想也许我可以将数据推送到我的堆栈中,然后在一个线程中我可以弹出它并解码消息。我不想减慢 DataReceivedHandler 的速度,所以我创建了一个线程,它可以弹出数据并将其写入我的 decodeMessage() 函数中的 Listview。
不久之后,我得到一个 System.OutOfMemories 异常..
任何想法我可以如何以更好的方式做到这一点?
当数据到达这里时,我正在从我的串口读取数据:
Stack<byte[]> stack = new Stack<byte[]>();
......
public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
byte[] data = new byte[sp.BytesToRead];
sp.Read(data, 0, data.Length);
stack.Push(data);
}
这是我的主题:
private void formatData()
{
try
{
while (true)
{
byte[] data;
int i=0;
Dispatcher.BeginInvoke(new Action(() =>
{
while (stack.Count > 0)
{
data = stack.Pop();
while (i < data.Length)
{
decodeMessage(data[i]);
i++;
}
}
}));
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
谢谢