Autor Beitrag
peterbe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Do 07.08.14 15:57 
hallo,

dieser code wird ausgeführt und es ensteht die unten stehende Fehlermeldung.
Der string buffer wird nicht in die textbox tbserRead geschrieben.
Wieso nicht?

ausblenden C#-Quelltext
1:
2:
string buffer  = serPort.ReadExisting();//Die Daten,die ich seriell empfange stehen im buffer
tbSerRead.Text = tbSerRead.Text + buffer;//

ausblenden Quelltext
1:
###Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement tbSerRead erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.					

mfg
Peter

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Titel geändert.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 07.08.14 16:41 
Hallo,

du verwendest den Code aus dem SerialPort.DataReceived-Ereignis? Dann beachte die Hinweise dort:
MSDN hat folgendes geschrieben:
Das DataReceived-Ereignis wird in einem sekundären Thread ausgelöst, wenn Daten vom SerialPort-Objekt empfangen werden. Da dieses Ereignis in einem sekundären Thread und nicht im Hauptthread ausgelöst wird, kann der Versuch, Elemente wie UI-Elemente im Hauptthread zu ändern, eine Threadausnahme auslösen. Falls es erforderlich ist, Elemente im Haupt-Form oder im Haupt-Control zu ändern, senden Sie Änderungsanforderungen mithilfe von Invoke zurück, der den Vorgang dann auf dem richtigen Thread ausführt.

s. z.B. [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)
peterbe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Fr 08.08.14 13:13 
Danke!So habe ich das Problem gelöst.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
        string buffer;
        private void serPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            buffer = serPort.ReadExisting();
            
            this.Invoke(new EventHandler(type));

        }
        void type(object s, EventArgs e)
        {
            tbSerRead.Text = tbSerRead.Text + buffer;//Schreibe Werte in Textbox
        }


Moderiert von user profile iconTh69: C#-Tags hinzugefügt