Hallo Leute,
ich hab ein Problem wo ich nun schon länger grübel und auch mit der sufu und google nicht weiterkomme.
Ich habe folgenden Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| while(true){ this.numberOfLastPackage=this.internSerial.BytesToRead; for(int i=0;i<this.numberOfLastPackage;++i){ this.receivePackage[i+this.numberOfWholePackage]=(byte)this.internSerial.ReadByte(); } if(this.DataReceivedEvent!=null) this.DataReceivedEvent(this.internSerial.BytesToRead); this.numberOfWholePackage+=this.numberOfLastPackage; if(this.numberOfWholePackage>=receive_package_size) break; } |
Ich will ein Gerät auslesen welches 2 Möglichkeiten der Datenübertragung hat: Entweder es komtm ein Blott mit 26 bytes, oder es kommt ein Block mit 26 Bytes, Pause (einige Sekunden), und dann noch ein Block mit einigen Tausend Bytes.
Dazu möchte ich mit bytesToRead erstmal die möglichen bytes feststellen, dann auslesen, Event feuern, Gesamtzahl der empfangenen Bytes speichern und mit der erwarteten Gesamtzahl vergleichen.
Wenn ich nun starte kommt er aus der Schleife nicht mehr raus. Der Debugger (Sharp develop) zeigt nun folgendes (hier wirds für mich ziemlich gruslig
bytesToRead hat die Grösse 26, aber laut debugger ist "numberOfLastPackage" auch nach der Zuweisung 0. Er durchläuft die for-Schleife 13 Mal, geht denn bis zum Ende der while Schleife und setzt "numberOfLastPackage" und "numberOfWholePackage" auf 13.
Dann wieder zurück, "numberOfLastPackage" bleibt auf 13, er durchläuft for for-Schleife 7 mal, setzt dann "numberOfLastPackage" auf 6 (im Gegensatz zum ersten Mal ist dieser Wert nun falsch, warum auch immer er überhaupt in "Raten" läuft) und setzt dann auch "numberOfWholePackage" auf 19.
Dann schreibt er beim nächsten mal natürlich in receivePackage[19], obwohl da schon der 7te Wert drin steht usw.
Hat jemand eine Idee was da falsch läuft? Die verspätetet Anzeige von aktuellen "numberOfLastPackage" Wert könnte ich ja noch als Fehler in #Develop erklären, aber die Anzahl der Schleifendurchläufe sind real, weshalb er gegen Ende nicht mehr die Bedingung zum verlassen erreicht (BytesToRead wird scheinbar 0 bevor er die 26 des "receive_package_size" erreicht).
Schonmal danke für die Hilfe
mfg
Udo
Moderiert von
Kha: C#-Tags hinzugefügt