Laden...

Serielle Kommunikation - Form hängt sich nach Beenden auf?!

Erstellt von Janiiix3 vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.762 Views
J
Janiiix3 Themenstarter:in
38 Beiträge seit 2015
vor 8 Jahren
Serielle Kommunikation - Form hängt sich nach Beenden auf?!

Hallo Leute,

Ich habe ein kleines Problem.
Wenn ich Daten von der seriellen Schnittstelle lese und sie in meine TextBox (Expander_1) schreiben möchte, stürzt meine Form ab, mit folgender Fehlermeldung :

Fehlermeldung:
{"Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement Expander_1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."}

Wie kann ich dieses Problem beheben?

Hinweis von Coffeebean vor 8 Jahren

Bitte benutze die richtigen Tags [Hinweis] Wie poste ich richtig? Punkt 6

L
94 Beiträge seit 2013
vor 8 Jahren

Hi , erstmal wäre ein bisschen code nicht schlecht.

hier mal nen ansatz woran es liegt ^^

[FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

gruß

J
Janiiix3 Themenstarter:in
38 Beiträge seit 2015
vor 8 Jahren

Viel mache ich dort ja noch nicht. Ich wollte eigentlich direkt die Empfangen Bytes in meine ListBox schreiben...

        public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            if(serialPort1.IsOpen)
            {
                Expander_1.Items.Add(serialPort1.ReadLine());
            }
        }

W
955 Beiträge seit 2010
vor 8 Jahren

Hallo,

der SerialPort lauscht mit einem anderen Thread auf der Leitung damit die GUI nicht blockiert. Mit diesem Thread ruft er dann den Eventhandler auf, damit darfst du nicht direkt die GUI anfassen
Controls von Thread aktualisieren lassen

J
Janiiix3 Themenstarter:in
38 Beiträge seit 2015
vor 8 Jahren

Ich steige da noch nicht ganz so hinter.
Wie kann ich jetzt in meinem Fall das Problem am intiligentesten lösen? ?(

D
152 Beiträge seit 2013
vor 8 Jahren

Schau Dir den bereits angegebenen Artikel an

Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

Und noch die beiden folgenden auf den MSDN Seiten

Control.InvokeRequired-Eigenschaft

Control.Invoke-Methode

J
Janiiix3 Themenstarter:in
38 Beiträge seit 2015
vor 8 Jahren

Diese Seiten habe ich mir bereits durchgelesen. Wie baue ich das jetzt in meinem Code ein. Bin mehr oder weniger Quereinsteiger.
Könntet ihr mir mal ein Beispiel geben, was sich anhand meiner Funktion orientiert?

D
152 Beiträge seit 2013
vor 8 Jahren

Ein Beispiel ungetestet


public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    if(serialPort1.IsOpen)
    {
        AddReceivedLine(serialPort1.ReadLine());
    }
}

private void AddReceivedLine(string line)
{
    if(Expander_1.InvokeRequired)
    {
        Expander_1.Invoke((Action<string>)AddReceivedLine, line);
    }
    else
    {
        Expander_1.Items.Add(line);
    }
}

J
Janiiix3 Themenstarter:in
38 Beiträge seit 2015
vor 8 Jahren

Okay...

Also die Daten werden richtig geschrieben. Nur ist es nach wie vor das die Form nicht mehr reagiert.

J
Janiiix3 Themenstarter:in
38 Beiträge seit 2015
vor 8 Jahren

Könntest du mir das mal anhand meiner Situation darstellen?
Ich kann es noch nicht wirklich umsetzen. Wäre sehr nett von dir!

4.939 Beiträge seit 2008
vor 8 Jahren

Da ich dein Programm nicht kenne, ist das unmöglich, aus der Ferne zu beheben 😉
Überprüfe mit dem Debugger, wo dein Programm hängt (unterbreche einfach mal dein Programm und schau, welche Threads laufen und in welchen Methoden diese hängen mittels des Stacktrace-Fensters).

D
171 Beiträge seit 2008
vor 8 Jahren

Hallo Janiix3,

im Zweifel könnte dein Problem dort liegen, wo du den Port auf machst, wartest du irgendwie auf empfangene Daten? Sorichtig nebenläufig ist die SerialPort Verarbeitung out of the Box dann nämlich auch nicht.

2.207 Beiträge seit 2011
vor 8 Jahren

Hallo Janiiix3,

Wie kann ich jetzt in meinem Fall das Problem am intiligentesten lösen?

Könntet ihr mir mal ein Beispiel geben, was sich anhand meiner Funktion orientiert?

Könntest du mir das mal anhand meiner Situation darstellen?

Bitte wälz die Arbeit nicht aufs Forum ab. Du hast genau die Hinweise bekommen, die du brauchst. Zusammen mit der Fehlermeldung hast du Hintergründe, Suchbegriffe und Erklärungen, die dich voranbringen.

Bitte beachte [Hinweis] Wie poste ich richtig? 4.2

Gruss

Coffeebean

J
Janiiix3 Themenstarter:in
38 Beiträge seit 2015
vor 8 Jahren

Hallo,

Ich endschuldige mich, wenn das für euch so rüber kommt.
Die empfohlenen Beiträge habe ich studiert und übernommen. Leider habe ich immer noch das selbe Problem wie davor.

Das Programm werde ich jetzt mal mit beifügen.

Hinweis von MrSparkle vor 8 Jahren

Fullquote und Projekt im Anhang entfernt.

Bitte beachte [Hinweis] Wie poste ich richtig?, Punkt 2.3 "Sparsam zitieren, keine Full Quotes" sowie 4.1 "Bitte keine kompletten Projekte posten"

2.298 Beiträge seit 2010
vor 8 Jahren

Dann hast du es nicht richtig gemacht. - Lies dir die Beiträge in ruhe durch. Nicht einfach probieren, sondern wirklich lesen.

Ich bin mir zu 100% sicher, dass du das Problem so gelöst bekommst.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |