Puerto serial asíncrono C # leído

Tengo una clase que lee desde el puerto serie utilizando el controlador de eventos DataReceived en C #. Cuando recibo datos, sé que el encabezado tendrá 5 bytes, por lo que no quiero hacer nada con los datos hasta que tenga al menos eso. Mi código actual está abajo:

while (serialPort.BytesToRead<5)
{
//Do nothing while we have less bytes than the header size
}

//Once at least 5 bytes are received, process header

Según tengo entendido, este código está bloqueando y necesita ser mejorado. Estoy buscando sugerencias sobre cómo hacer esto. ¿Sería apropiado otro controlador de eventos dentro del controlador de eventos DataReceived?

Respuestas a la pregunta(2)

Su respuesta a la pregunta