Hallo Forum, ich möchte den Datenempfang über die serielle Schnittstelle mit meiner restlichen Applikation synchronisieren. Die Datenübertragung wird durch ein kleines Protokoll gesteuert. Wenn ich Daten sende, dann bekomme ich nach einiger Zeit eine positive/negative Antwort. Anschliessend sollen je nach Antwort entweder neue Daten gesendet, oder die alten wiederholt werden. In der Umsetzung sieht das bislang so aus, dass ich über die SerialPort Komponente auf serielle Schnittstelle zugreife. Über den DataReceived Event empfange ich die Daten, die dann dekodiert und ausgewertet werden. Das funktioniert soweit auch alles zufrieden stellend. Wenn ich jetzt viele Daten zu senden habe, dann würde ich gerne im Programmteil, der die Sendedaten in ein Protokoll verpackt so lange mit dem Senden "warten", bis ich das OK für das korrekte Versenden der Daten über die serielle Schnittstelle zurück gekommen ist (loop-until) und ich dann das nächste Datenpaket auf die Reise schicke. Die Frage ist nun, wie bekomme ich beim Senden mit, dass etwas empfangen worden ist? Unterbricht der DataReceived Event meinen anderen Programmteil und wertet die Daten aus? Läuft die SerialPort Komponente in einem eigenen Thread? Meine ersten Versuche dahingehend waren leider nicht erfolgreich. Ich habe im DataReceived Event nach der Dekodierung ein Flag für den korrekten Empfang gesetzt und auf dieses beim Senden geprüft. Leider bin ich an dieser Stelle dann immer in eine Endlosschleife gestapft :-( Wie kann ich nun den Datenaustausch zwischen der SerialPort Komponente und meiner restlichen Applikation gestalten? Ist es eine gute Idee die Auswertung in einen eigenen Thread zu verpacken? Würde zum Beispiel der BackgroundWorker etwas bringen, wenn ich auf die positive Antwort warte? Wie warte ich am Geschicktesten in einem Programmteil auf Daten von der seriellen Schnittelle? Bin für jede Hilfe dankbar! Viele Grüße Volker
Jep, mit Threads bist du auf dem richtigen Weg. Die musst du sogar verwenden da ansonsten deine GUI blokiert solange auf die Daten gewartet wird. Bau dir am besten eine Klasse die das Empfangen der Daten übernimmt (in einem eigenem Thread) und wenn alle Daten empfangen worden sind feuert die Klasse einen Event der signalisiert das alle Daten angekommen sind.
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.