Atualização da GUI de C # e comunicação de porta serial assíncrona
Estou tentando criar um aplicativo que se comunique com o hardware via porta serial e relate os resultados à GUI.
Atualmente, a movimentação pela GUI é feita por KeyEvents, que acionam o desenho da próxima "página" da GUI. No entanto, em uma etapa (depois que a tecla é pressionada), preciso desenhar uma nova página e enviar alguns comandos via porta serial.
O envio do comando é feito via:
port.Write(data, 0, data.Length);
Em seguida, espero a resposta aguardando o acionamento do DataReceivedHandler - apenas indica que há dados aguardando e que estão sendo processados em outro método.
No começo, eu apenas coloquei o comando de envio e recebimento na função que desenha a página após as "partes desenhadas", no entanto, ela ficou presa - os dados estavam sendo transferidos, mas a página não foi desenhada - foi congelada.
Então eu fiz um método assíncrono:
private async void SendData()
{
await Task.Run(() => serialClass.SendAndReceive(command));
// process reply etc.
}
Que é usado assim:
public void LoadPage()
{
image = Image.FromFile(path);
//do some stuff on image using Graphics, adding texts etc.
picturebox1.Image = image;
SendData();
}
Funciona bem, porém preciso "recarregar" a página (para chamar novamente o LoadPage). Se eu fizer isso dentro do método assíncrono como este:
private async void SendData()
{
await Task.Run(() => serialClass.SendAndReceive(command));
// process reply etc.
LoadPage();
}
Obviamente, a imagem não será atualizada, embora os dados sejam enviados via porta serial. É possível verificar de alguma forma se a função assíncrona foi concluída e acionar um evento onde eu poderia recarregar a página?
Até agora, tentei usar o BackGroundWorker Work Complete e a Property Change. Os dados foram enviados novamente, mas a imagem não foi recarregada. Alguma idéia de como eu posso conseguir isso?
Agradecemos antecipadamente a ajuda, Atenciosamente