C # GUI-Aktualisierung und asynchrone serielle Schnittstellenkommunikation

Ich versuche, eine Anwendung zu erstellen, die über die serielle Schnittstelle mit der Hardware kommuniziert und die Ergebnisse an die GUI meldet.

Das aktuelle Bewegen durch die GUI wird von KeyEvents ausgeführt, die das Zeichnen der nächsten "Seite" der GUI auslösen. In einem Schritt (nachdem die Taste gedrückt wurde) muss ich jedoch eine neue Seite zeichnen und einige Befehle über die serielle Schnittstelle senden.

Der Befehl wird gesendet über:

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

Ich warte dann auf die Antwort, indem ich auf den Auslöser von DataReceivedHandler warte. Es wird lediglich darauf hingewiesen, dass Daten warten und auf eine andere Methode verarbeitet werden.

Zunächst habe ich in der Funktion zum Zeichnen der Seite nach dem "Zeichnen von Teilen" nur den Befehl zum Senden und Empfangen eingegeben, aber die Seite blieb hängen - die Daten wurden übertragen, aber die Seite wurde nicht gezeichnet - sie wurde eingefroren.

Dann habe ich eine asynchrone Methode erstellt:

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

Was wird so verwendet:

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

Es funktioniert einwandfrei, ich muss jedoch die Seite "neu laden" (um LoadPage erneut aufzurufen). Wenn ich das mit der asynchronen Methode mache:

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

Dann wird das Bild natürlich nicht aktualisiert, obwohl die Daten über die serielle Schnittstelle gesendet werden. Kann ich irgendwie überprüfen, ob die asynchrone Funktion beendet wurde und ein Ereignis auslösen, bei dem ich die Seite neu laden kann?

Bisher habe ich versucht, BackGroundWorker Work Complete und Property Change zu verwenden. Die Daten wurden erneut gesendet, aber das Bild wurde nicht neu geladen. Irgendeine Idee, wie ich das erreichen kann?

Vielen Dank im Voraus für die Hilfe, Mit freundlichen Grüßen

Antworten auf die Frage(2)

Ihre Antwort auf die Frage