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

questionAnswers(1)

yourAnswerToTheQuestion