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?
Bitte benutze die richtigen Tags [Hinweis] Wie poste ich richtig? Punkt 6
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ß
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());
}
}
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
Ich steige da noch nicht ganz so hinter.
Wie kann ich jetzt in meinem Fall das Problem am intiligentesten lösen? ?(
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
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?
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);
}
}
Okay...
Also die Daten werden richtig geschrieben. Nur ist es nach wie vor das die Form nicht mehr reagiert.
Dann lies dir den anderen FAQ-Beitrag dazu durch: [FAQ] Warum blockiert mein GUI?
Könntest du mir das mal anhand meiner Situation darstellen?
Ich kann es noch nicht wirklich umsetzen. Wäre sehr nett von dir!
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).
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.
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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.
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"
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 |