Actualización de GUI C # y comunicación de puerto serie asíncrono
Estoy tratando de crear una aplicación que se comunique con el hardware a través del puerto serie e informe los resultados a la interfaz gráfica de usuario.
Actualmente, KeyEvents realiza el movimiento a través de la GUI que activa el dibujo de la próxima "página" de la GUI. Sin embargo, en un paso (después de presionar la tecla) necesito dibujar una nueva página y enviar algunos comandos a través del puerto serie.
El envío del comando se realiza a través de:
port.Write(data, 0, data.Length);
Luego espero la respuesta esperando que se active DataReceivedHandler: solo señala que hay datos en espera y los datos se están procesando en otro método.
Al principio, simplemente puse el comando de envío y recepción en la función de dibujo de la página después de las "partes de dibujo", sin embargo, se quedó atascado: los datos se estaban transfiriendo, pero la página no se dibujó, estaba congelada.
Luego hice un método asíncrono:
private async void SendData()
{
await Task.Run(() => serialClass.SendAndReceive(command));
// process reply etc.
}
Que se usa así:
public void LoadPage()
{
image = Image.FromFile(path);
//do some stuff on image using Graphics, adding texts etc.
picturebox1.Image = image;
SendData();
}
Funciona bien, sin embargo, necesito "volver a cargar" la página (para volver a llamar a LoadPage). Si lo hago dentro del método asíncrono como este:
private async void SendData()
{
await Task.Run(() => serialClass.SendAndReceive(command));
// process reply etc.
LoadPage();
}
Entonces, obviamente, la imagen no se actualizará, aunque los datos se enviarán a través del puerto serie. ¿Es posible verificar de alguna manera si la función asincrónica se terminó y desencadenar un evento en el que pueda volver a cargar la página?
Hasta ahora he intentado usar BackGroundWorker Work Complete y Property Change. Los datos se enviaron nuevamente, pero la imagen no se volvió a cargar. ¿Alguna idea de cómo puedo lograr eso?
Gracias de antemano por la ayuda, Saludos cordiales