Freigeben über


NetworkStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Methode

Definition

Beginnt einen asynchronen Lesevorgang aus dem NetworkStream.

public:
 override IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int size, AsyncCallback ^ callback, System::Object ^ state);
public:
 override IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ callback, System::Object ^ state);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int size, AsyncCallback? callback, object? state);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback? callback, object? state);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int size, AsyncCallback callback, object state);
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginRead (buffer As Byte(), offset As Integer, size As Integer, callback As AsyncCallback, state As Object) As IAsyncResult
Public Overrides Function BeginRead (buffer As Byte(), offset As Integer, count As Integer, callback As AsyncCallback, state As Object) As IAsyncResult

Parameter

buffer
Byte[]

Ein Array vom Typ Byte, das dem Speicherort entspricht, an dem aus dem NetworkStream gelesene Daten gespeichert werden.

offset
Int32

Die Position in buffer, an der mit dem Speichern der Daten begonnen werden soll.

sizecount
Int32

Die Anzahl der aus dem NetworkStream zu lesenden Bytes.

callback
AsyncCallback

Der AsyncCallback-Delegat, der nach Abschluss von BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) ausgeführt wird.

state
Object

Ein Objekt, das zusätzliche, benutzerdefinierte Daten enthält.

Gibt zurück

Ein IAsyncResult, das den asynchronen Aufruf darstellt.

Ausnahmen

Der buffer-Parameter ist null.

Der offset-Parameter ist kleiner als 0.

- oder -

Der offset-Parameter ist größer als die Länge des buffer-Parameters.

- oder -

Die size ist kleiner als 0.

- oder -

Der size-Parameter ist größer als die Länge von buffer abzüglich des Werts des offset-Parameters.

Der zugrunde liegende Socket wird geschlossen.

- oder -

Beim Lesen aus dem Netzwerk ist ein Fehler aufgetreten.

- oder -

Beim Zugreifen auf den Socket ist ein Fehler aufgetreten.

Der NetworkStream ist geschlossen.

Hinweise

Wichtig

Dies ist eine Kompatibilitäts-API. Es wird nicht empfohlen, die APM-Methoden (Begin/End) für die Neuentwicklung zu verwenden. Verwenden Sie stattdessen die aufgabenbasierten Entsprechungen.

Sie können einen Rückruf übergeben, der implementiert, BeginRead um über den Abschluss des Vorgangs AsyncCallback benachrichtigt zu werden. Beachten Sie, dass der Rückruf während des Aufrufs BeginReadvon inline ausgeführt wird, wenn der zugrunde liegende Netzwerkstapel den Vorgang synchron abschließt. In diesem Fall wird die CompletedSynchronously -Eigenschaft für den zurückgegebenen IAsyncResult auf true festgelegt, um anzugeben, dass die Methode synchron abgeschlossen wurde. Verwenden Sie die AsyncState -Eigenschaft von IAsyncResult , um das an die -Methode übergebene Zustandsobjekt BeginRead abzurufen.

Der BeginRead Vorgang muss durch Aufrufen der EndRead -Methode abgeschlossen werden. In der Regel wird die -Methode vom bereitgestellten AsyncCallback Delegaten aufgerufen. EndRead blockiert den aufrufenden Thread, bis der Vorgang abgeschlossen ist.

Der Vorgang liest so viele Daten, wie verfügbar sind, bis zu der Anzahl von Byte, die size vom Parameter angegeben wird.

Hinweis

Wenn Sie einen IOExceptionerhalten, überprüfen Sie die InnerException -Eigenschaft, um zu ermitteln, ob sie durch eine SocketExceptionverursacht wurde. Wenn ja, verwenden Sie die ErrorCode -Eigenschaft, um den spezifischen Fehlercode abzurufen.

Lese- und Schreibvorgänge können gleichzeitig auf einem instance der NetworkStream -Klasse ausgeführt werden, ohne dass eine Synchronisierung erforderlich ist. Solange es einen eindeutigen Thread für die Schreibvorgänge und einen eindeutigen Thread für die Lesevorgänge gibt, gibt es keine Kreuzinterferenz zwischen Lese- und Schreibthreads, und es ist keine Synchronisierung erforderlich.

Gilt für:

Weitere Informationen