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!
du darfst aus den Thread nicht direkt die GUI ansteuern. Suche mal nach invoke.
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
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...
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,
was brauchst du denn noch hier ist doch ein beispiel drin. http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.