c# Asynchron GUI Ausgabe

Registriert
Dez. 2018
Beiträge
1
Hallo zusammen,

Ich habe ein c# Programm und eine GUI in der ich mit async dauerhaft die Serielle Schnittstelle ausgeben will.

Hier mal ein Code Ausschnitt:

C#:
        private Task ReadSerialUART;
        private SerialPort SerialPort;

        public void StartSerial()
        {
            try
            {
                SerialPort.Open();
            } catch (Exception)
            {
            }
            this.SerialPort = new SerialPort(this.set.Port, int.Parse(this.set.Baudrate), Parity.None, 8, StopBits.One);
            try
            {
                this.SerialPort.Open();
            } catch (Exception e)
            {
                this.trans.writeText(e.ToString());
                this.trans.writeText("Zugriff auf die COM Schnittstelle nicht möglich");
            }
            finally
            {
                this.tivi.setComport(this.set.Port);
                this.trans.writeText("Verbunden mit " +this.set.Port, "Blue");
                ReadSerialUART = new Task(ReadSerial);
                ReadSerialUART.Start();
            }
        }

        public void ReadSerial()
        {          
            char Key;
            while (1 == 1)
            {
                Key = (char)this.SerialPort.ReadChar();
                this.trans.richTextBox_message.Text += Key;        // Ich kann so nicht die Ausgabe auf die TextBox machen
            }          
        }

Ich bekomme jedoch beim Ausführen, bzw. beim ausgeben des eingelesen Char's die folgende Fehlermeldung:

System.InvalidOperationException: "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement richTextBox_message erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."

Ich habe gelesen, das man irgendwie die GUI Ausgabe in einen Thread packen muss, aber wie genau das gehen soll habe ich nicht herausgefunden.

Danke für Hilfe.
 
Hallo,
das Problem ist dass der SerialPort in einem separaten Thread läuft. Dieser Thread kann NICHT auf die UI Elemente zugreifen. Das muss durch den UI-Thread erledigt werden.

Dies löst dein Problem.

greetz
hroessler
 
Zuletzt bearbeitet von einem Moderator:
GUI Methoden sind nicht Thread Safe und duerfen deshalb nur auf dem GUI Thread ausgefuehrt werden. Die Elemente haben deshalb eine Invoke Methode, was die uebergebende Funktion der GUI Loop hinzufuegt, wo die dann im ensprechenden Thread ausgefuehrt wird.

Ein bisschen Googlen haette das problem auch geleost..
Etwa so
 
Zurück
Oben