Puerto serie de lectura + Hilos o algo mejor?

No sé si esta es una buena manera de trabajar con una pila para esta tarea, pero estoy seguro de que hay una forma más rápida ... Obtengo datos de mi microcontrolador pero la longitud de los datos no siempre es la misma. Pensé que tal vez podría insertar datos en mi pila y, en un hilo, puedo abrirlos y decodificar el mensaje. No quise ralentizar el DataReceivedHandler, así que creé un Thread que puede mostrar los datos y escribirlos en mi vista de lista en mi función decodeMessage ().

Después de un corto período de tiempo recibo una excepción de System.OutOfMemories ..

¿Alguna idea de cómo puedo hacerlo de una mejor manera?

Estoy leyendo desde mi puerto serie justo cuando los datos llegan aquí:

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);
}

Y este es mi hilo:

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);
    }
}

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta