Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Serielle Kommunikation - Form hängt sich nach Beenden auf?!
Janiiix3
myCSharp.de - Member



Dabei seit:
Beiträge: 38
Herkunft: Hannover

Themenstarter:

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

beantworten | zitieren | melden

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 :
Fehler
{"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?

Moderationshinweis von Coffeebean (09.11.2015 - 07:24)

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

private Nachricht | Beiträge des Benutzers
lechiffre
myCSharp.de - Member



Dabei seit:
Beiträge: 94
Herkunft: Hannover

beantworten | zitieren | melden

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ß
private Nachricht | Beiträge des Benutzers
Janiiix3
myCSharp.de - Member



Dabei seit:
Beiträge: 38
Herkunft: Hannover

Themenstarter:

beantworten | zitieren | melden

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());
            }
        }
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 955

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Janiiix3
myCSharp.de - Member



Dabei seit:
Beiträge: 38
Herkunft: Hannover

Themenstarter:

beantworten | zitieren | melden

Ich steige da noch nicht ganz so hinter.
Wie kann ich jetzt in meinem Fall das Problem am intiligentesten lösen? ?(
private Nachricht | Beiträge des Benutzers
david.m
myCSharp.de - Member



Dabei seit:
Beiträge: 136

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Janiiix3
myCSharp.de - Member



Dabei seit:
Beiträge: 38
Herkunft: Hannover

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
david.m
myCSharp.de - Member



Dabei seit:
Beiträge: 136

beantworten | zitieren | melden

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);
    }
}
private Nachricht | Beiträge des Benutzers
Janiiix3
myCSharp.de - Member



Dabei seit:
Beiträge: 38
Herkunft: Hannover

Themenstarter:

beantworten | zitieren | melden

Okay...

Also die Daten werden richtig geschrieben. Nur ist es nach wie vor das die Form nicht mehr reagiert.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.430

beantworten | zitieren | melden

Dann lies dir den anderen FAQ-Beitrag dazu durch: [FAQ] Warum blockiert mein GUI?
private Nachricht | Beiträge des Benutzers
Janiiix3
myCSharp.de - Member



Dabei seit:
Beiträge: 38
Herkunft: Hannover

Themenstarter:

beantworten | zitieren | melden

Könntest du mir das mal anhand meiner Situation darstellen?
Ich kann es noch nicht wirklich umsetzen. Wäre sehr nett von dir!
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.430

beantworten | zitieren | melden

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).
private Nachricht | Beiträge des Benutzers
Daniel83
myCSharp.de - Member



Dabei seit:
Beiträge: 171
Herkunft: Bielefeld Deutschland

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2.207
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Hallo Janiiix3,
Zitat von Janiiix3
Wie kann ich jetzt in meinem Fall das Problem am intiligentesten lösen?
Zitat von Janiiix3
Könntet ihr mir mal ein Beispiel geben, was sich anhand meiner Funktion orientiert?
Zitat von Janiiix3
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
private Nachricht | Beiträge des Benutzers
Janiiix3
myCSharp.de - Member



Dabei seit:
Beiträge: 38
Herkunft: Hannover

Themenstarter:

beantworten | zitieren | melden

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.

Moderationshinweis von MrSparkle (09.11.2015 - 17:53)

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"

private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2.296

beantworten | zitieren | melden

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 | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers