Forum: PC-Programmierung Threadübergreifender Zugriff


von Nestea (Gast)


Lesenswert?

Hallo an Alle,

Momentan hab ich ein Problem mit einem Thread.

Ich versuche Daten aus einer seriellen SChnittstelle auf einer Richbox 
auszugeben. Dies versuch ich mittels eines eigenen Backgroundworkers 
weil ansonsten mein Hauptprogram hängt.

Doch sobald ich den Backgroundworker aktiviere fängt der 
Backgroundworker an Daten einzulesen, jedoch reagiert c# mit der 
Fehlermeldung:

Ungültiger Threadübergreifender Vorgang

Hat vll jemand eine Lösung wie ich die Daten im Backgroundworker 
einlesen kann und anschließen in einer RichTextBox im Hauptprogram 
ausgeben kann?

Hier noch mein Coding:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            //-------------Öffnen der seriellen 
Schnittstelle-------------
            MessageBox.Show("Offen");
            PortSeriell.Open();

            if (a == 1)
            {
                backgroundWorker1.WorkerSupportsCancellation = true;
            }

            txtStreamAusgabe.Text += PortSeriell.ReadLine();


            //-----------Schließen der seriellen 
Schnittstelle------------




        }

Danke schon mal im voraus!

von Peter (Gast)


Lesenswert?

du darfst aus den Thread nicht direkt die GUI ansteuern. Suche mal nach 
invoke.

von Nestea (Gast)


Lesenswert?

Hallo,

Das mit Invoke hab ich schon versucht, nur leider komm ich damit nicht 
so recht zurecht, bin noch nicht so fortgeschritten im Programmieren.

Hab mit Invoke schon herumgebastel aber leider keine erkenntniss daraus 
gewonnen.

Danke

von Arc N. (arc)


Lesenswert?

Das Update der UI-Elemente muss in deren Thread gemacht werden.
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx
Stichwort wäre z.B. Invoke. Beispielcode z.B. hier: 
http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx oder über die 
Suche des Forums...

von Nestea (Gast)


Lesenswert?

Hallo,

Wie könnt ich Invoke an meinen Beispiel anwenden?
Bzw, wie ich die GUI Nicht Direkt ansteuern kann

Die Hilfen von Microsoft konnten mir auch ned wirklich helfen

Danke,

von Peter (Gast)


Lesenswert?

was brauchst du denn noch hier ist doch ein beispiel drin.

http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx

von fz (Gast)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Und falls du es immer noch nicht verstanden hast.
Du darfst das hier

txtStreamAusgabe.Text += PortSeriell.ReadLine();

nicht tun, sondern du musst dir eine Funktion (einen Delegate) machen, 
der dieses Anhängen für dich erledigt. Diese Funktion rufst du dann über 
Invoke auf und gibts ihr den anzuhängenden Text mit.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.