Hallo,
ich bin dabei, ein Client-Programm zu entwickeln, das Daten von einem Server empfängt und anzeigt. Das Ganze läuft auf einem PDA, bzw PDA Emulator. In diesem Fall handelt es sich um Strings, die mit vom Server aus gesendet werden, abgegrenzt durch #10#13 (also WriteLn vom IdTcpServer)
Jetzt darf das Programm aber nicht blockieren, wenn mal keine Daten kommen, also war das magische Stichwort "Thread"
Nach langer Recherche sah ich nun zwei Möglichkeiten, dies zu realisieren:
1. Den ganzen Client in einen Thread auslagern, leider habe ich keine Ahnung, wie man unter .Net einen Thread erstellt, dazu konnte ich
bisher nichts hilfreiches finden, ich habe mich auch auf die zweite Möglichkeit konzentriert
2. Die Methoden
TcpClient.GetStream.BeginRead()
und
TcpClient.GetStream.EndRead()
nutzen.
Ich habe mich erstmal für die zweite Methode entschieden, da sie mir doch einfacher erscheint. Doch auch hier habe ich ein Problem, denn leider verstehe ich den Umgang mit diesen Methoden nicht richtig
FClient.GetStream.BeginRead(ReceiveArray,0,length(ReceiveArray),{callback},{state});
Die letzten beiden Parameter sind es die mir "Sorgen" bereiten. In der Hilfe steht dazu:
Zitat von
Delphihilfe:
callback
Der AsyncCallback-Delegat, der nach Abschluss von BeginRead ausgeführt wird.
state
Ein Objekt, das zusätzliche, benutzerdefinierte Daten enthält.
Also fix weitergeschaut:
Zitat von
Delphihilfe:
AsyncCallback
Verweist auf die Rückrufmethode, die nach Abschluss des asynchronen Vorgangs aufgerufen werden soll.
Die Deklaration der Rückrufmethode muss dieselben Parameter aufweisen wie die Deklaration des AsyncCallback-Delegaten.
Die Information zu state ist quasi null
Ähnlich verhält es sich mit der Endread Methode:
FClient.GetStream.EndRead({AsyncResult})
Die Hilfe schreibt dazu
Zitat von
Delphihilfe:
EndRead
Behandelt das Ende eines asynchronen Lesevorgangs.
Parameter
asyncResult
Ein IAsyncResult, das einen asynchronen Aufruf darstellt.
Na Toll und was ist das jetzt?
Zitat von
Delphihilfe:
Stellt den Status eines asynchronen Vorgangs dar.
Alle Beispiele, die ich in der Hilfe oder im Netz finden konnte, entweder in C# oder in VB. Daher hoffe ich, dass mir jemand von euch erklären kann was es mit diesem AsyncCallback, state und IAsyncResult auf sich hat, ich blicke da einfach nicht richtig durch.
Vielen Dank schonmal,
Ritsch