SerialPort1_DataReceived in Hauptthread übergeben

aargau

Erfahrenes Mitglied
Ich habe hier einige Microcontroller im Einsatz welche via Seriellschnittstelle mit einem VB Programm Kommunizieren soll.
meine Problematik ist nun das scheinbar SerialPort1_DataReceived() in einem anderen Thread läuft und ich so nicht einfach labelx.text=SerialPort1.Readline() machne kann um den Text direkt in der Form auszugeben...
Kann mir deshalb jemand sagen wie ich die Empfangenen Daten dennoch in ein Label oder ähnliches kriege?

Ich habe mich mit Threading leider bis jetzt noch überhaupt nicht beschäftigt.
 
Hallo,

dann wird wohl jetzt Threading unumgänglich sein...

Anbei möchte ich auf die Mutex-Klasse hinweisen...

Edit: Das Label stellt die gemeinsam genutzte Ressource dar.

Edit 2: Hab da noch was aus einem anderen Projekt gefunden...
C#:
         /*
           * Zur Info: txtBxLog ist eine TextBox, einfach durch das Label ersetzen.
           */
        private void logText(string text)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new Action<string>(this.logText), text);
            }
            else
            {
                txtBxLog.Text = txtBxLog.Text + "\r\n" + text;
            }
        }

Mit freundlichem Gruß,

VScan
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank für deine Hilfe!
Ich bin soweit zum Ziel gekommen mit dem Invoke().
Nun habe ich aber ein weiteres Problem.
Zwar kann ich Problemlos das Label ändern. Ich habe nun aber ein zweites Form welches eine ListBox beinhaltet.
In diese soll nun eigentlich der Wert welcher zurückgegeben wird.
Ich habe nun schon versucht über eine Globale Variabel den Inhalt zu Aktualisieren und danach eine Methode in der Klasse vom 2. Form Auszuführen.
Doch die Liste bleibt leer.
Gebe ich den Inhalt in einer MsgBox() aus erhalte ich auch da die korrekten Daten.
Fülle ich die Liste direkt aus Form1 ohne den Thread klappt es auch...
Wie kriege ich nun die Daten vom Subthread in die Listbox im anderen Form?
 
Hey,

versuch mal bei dem Konstruktor Deiner 2. From, die 1. From im Parameter zu übergeben, somit solltest du "public" deklarierte Methoden/Attribute von Form 2 in From 1 aufrufen können, da diese per Referenz übergeben wird.

Viele Grüße.

e.g.
C#:
Form2 f2 = new Form2(f1);

// oder this also das übergeordnete Objekt, da eine From meistens 
// aus einer anderen aufgerufen wird.

Form2 f2 = new Form2(this);
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück