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 neue Entwicklungen zu verwenden. Verwenden Sie stattdessen die aufgabenbasierten Entsprechungen.

Sie können einen Rückruf übergeben, der implementiert wird, 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 die zurückgegebene 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 Delegat aufgerufen. EndRead blockiert den aufrufenden Thread, bis der Vorgang abgeschlossen ist.

Der Vorgang liest so viele Daten, wie verfügbar sind, bis zur Anzahl von Bytes, die durch den size Parameter angegeben werden.

Hinweis

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

Lese- und Schreibvorgänge können gleichzeitig für eine Instanz 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 Querinterfernz zwischen Lese- und Schreibthreads, und es ist keine Synchronisierung erforderlich.

Gilt für:

Weitere Informationen