Einzelnen Beitrag anzeigen

Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#1

[Compact Framework] Benutzung von BeginRead

  Alt 20. Sep 2007, 14:02
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
Richard Mahr
  Mit Zitat antworten Zitat