Обновление графического интерфейса C # и асинхронная связь через последовательный порт

Я пытаюсь создать приложение, которое связывается с оборудованием через последовательный порт и сообщает о результатах в графический интерфейс.

В настоящее время перемещение по GUI осуществляется KeyEvents, которые запускают рисование следующей «страницы» GUI. Однако на одном шаге (после нажатия клавиши) мне нужно нарисовать новую страницу и отправить несколько команд через последовательный порт.

Отправка команды осуществляется через:

port.Write(data, 0, data.Length);

Затем я жду ответа, ожидая срабатывания DataReceivedHandler - он просто показывает, что данные ожидают, а данные обрабатываются другим способом.

Сначала я просто поместил команду отправки и получения в функцию рисования страницы после «рисования частей», однако она застряла - данные передавались, но страница не рисовалась - она ​​была заморожена.

Затем я сделал асинхронный метод:

private async void SendData()
{
  await Task.Run(() => serialClass.SendAndReceive(command));
  // process reply etc.
}

Который используется так:

public void LoadPage()
{
  image = Image.FromFile(path);
  //do some stuff on image using Graphics, adding texts etc.
  picturebox1.Image = image;
  SendData();
}

Он работает нормально, однако мне нужно «перезагрузить» страницу (чтобы снова вызвать LoadPage). Если я сделаю это внутри асинхронного метода, как это:

private async void SendData()
{
  await Task.Run(() => serialClass.SendAndReceive(command));
  // process reply etc.
  LoadPage();
}

Тогда, очевидно, изображение не будет обновлено, хотя данные будут отправлены через последовательный порт. Можно ли как-то проверить, была ли завершена асинхронная функция, и вызвать событие, при котором я мог бы перезагрузить страницу?

До сих пор я пытался использовать BackGroundWorker Work Complete и изменение свойства. Данные были отправлены снова, но изображение не было перезагружено. Есть идеи, как мне этого добиться?

Заранее спасибо за помощь, С наилучшими пожеланиями