mikrocontroller.net

Forum: PC-Programmierung Threadübergreifender Zugriff


Autor: Nestea (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Peter (Gast)
Datum:

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

Autor: Nestea (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Update der UI-Elemente muss in deren Thread gemacht werden.
http://msdn.microsoft.com/en-us/library/system.io....
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...

Autor: Nestea (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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,

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was brauchst du denn noch hier ist doch ein beispiel drin.

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

Autor: fz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.