Hallo, In meinem µC habe ich im Flash die Firmwareversion abgespeichert. Diese möchte ich nun über die serielle Schnittstelle am PC anzeigen lassen. Den Quellcode für die Datenepmfangsroutine hab ich im Anhang zur Verfügung gestellt. Mein Problem ist nun das ich folgende Fehlermeldung bekomme und die Firmwareversion nicht angezeigt wird: Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement richTextBox1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde. Viele Grüße Anna
:
Verschoben durch Moderator
Schau mal hier (und vor allem die 2 Links auf weitere Infos): http://www.entwickler-ecke.de/topic_Ungueltiger+threaduebergreifender+Vorgang_81735,0.html
Das mit dem Invoke hat das Problem nun im Debugmodus gelöst. Die Firmwareversion wird mir angezeigt. Nur wenn ich das Programm im bin/Debug Ordner starte so stürzt das Programm ab. Das dürfte doch gar nicht abstürzen? Gruß Anna
Wenn ich den relevanten Teil auskommentiere so zeigt es mir die Firmwareversion logischerweise nicht mehr an aber das Programm stürzt wenigstens nicht ab. Es muss also im auskommentierten Teil noch ein Fehler versteckt sein.
setz den Teil mal in den try Bereich und gib den Fehler (ex.Message) in der richtextbox aus.
1 | try
|
2 | {
|
3 | // code einfügen
|
4 | |
5 | }
|
6 | catch (Exception ex) |
7 | {
|
8 | |
9 | }
|
Ich denke das dieser Befehl mein Problem ist: if (receivedData.ToString() != byteSent[0].ToString()) // if received and already sent data are not equal (Failure!) Wenn ich diesen Befehl auskommentiere stürzt nichts mehr ab. Nur die Frage ist warum sollte an dem Befehl was nicht stimmen? byte[] byteSent; private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { receivedData = serialPort1.ReadByte(); if (receivedData.ToString() != byteSent[0].ToString()) { .... Programm } Gesendet wird folgendermaßen: byte[] byteToSend = { Convert.ToByte(128) }; // Sendedaten serialPort1.Write(byteToSend, 0, 1); byteSent = byteToSend; Gruß Anna
Wenn ich ein try catch um den Block lege und mir die Message ausgeben lasse bekomme ich folgendes siehe Bild. Zeile 90 ist übrigens diese hier: if (receivedData.ToString() != byteSent[0].ToString()) Hier muss also der Fehler liegen nur ich verstehe noch nicht ganz warum? Gruß Anna
byteSent ist scheinbar noch nicht inizialisiert, wenn serialPort1_DataReceived aufgerufen wird. tausche mal die 2 Zeilen:
1 | serialPort1.Write(byteToSend, 0, 1); |
2 | byteSent = byteToSend; |
1 | byteSent = byteToSend; |
2 | serialPort1.Write(byteToSend, 0, 1); |
Man könnte doch statt dem Zeilen tauschen auch byteSent initialisieren am Anfang? z.B so byte[] byteSent={0};
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.