Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Beginnt einen asynchronen Lesevorgang. (Verwenden Sie stattdessen ReadAsync(Byte[], Int32, Int32).)
public:
virtual IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ callback, System::Object ^ state);
public virtual IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback? callback, object? state);
public virtual IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback callback, object state);
public virtual IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback callback, object? state);
abstract member BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overridable Function BeginRead (buffer As Byte(), offset As Integer, count As Integer, callback As AsyncCallback, state As Object) As IAsyncResult
Parameter
- buffer
- Byte[]
Der Puffer, in den die Daten gelesen werden sollen.
- offset
- Int32
Der Byteoffset im buffer
, ab dem aus dem Stream gelesene Daten geschrieben werden.
- count
- Int32
Die maximale Anzahl der zu lesenden Bytes.
- callback
- AsyncCallback
Ein optionaler asynchroner Rückruf, der nach Abschluss des Lesevorgangs aufgerufen werden soll.
- state
- Object
Ein vom Benutzer bereitgestelltes Objekt, das diese asynchrone Leseanforderung von anderen Anforderungen unterscheidet.
Gibt zurück
Ein IAsyncResult, das den asynchronen Lesevorgang darstellt, der möglicherweise noch aussteht.
Ausnahmen
Es wurde versucht, einen asynchronen Lesevorgang über das Ende des Streams hinaus durchzuführen, oder es ist ein Datenträgerfehler aufgetreten.
Mindestens eines der Argumente ist ungültig.
Es wurden Methoden aufgerufen, nachdem der Stream geschlossen wurde.
Die aktuelle Stream
-Implementierung unterstützt den Lesevorgang nicht.
Hinweise
In .NET Framework 4 und vorherigen Versionen müssen Sie Methoden wie BeginRead und EndRead verwenden, um asynchrone E/A-Vorgänge zu implementieren. Diese Methoden sind weiterhin im .NET Framework 4.5 verfügbar, um Legacycode zu unterstützen. Die neuen asynchronen Methoden wie ReadAsync, WriteAsync, CopyToAsync, und FlushAsynchelfen Ihnen jedoch, asynchrone E/A-Vorgänge einfacher zu implementieren.
Die Standardimplementierung von BeginRead
in einem Stream ruft die Read Methode synchron auf, was bedeutet, dass einige Read
Streams blockiert werden können. Instanzen von Klassen wie FileStream
und NetworkStream
unterstützen jedoch vollständig asynchrone Vorgänge, wenn die Instanzen asynchron geöffnet wurden. Daher werden Aufrufe von BeginRead
für diese Datenströme nicht blockiert. Sie können (z. B. mithilfe von asynchronen Delegaten) überschreiben BeginRead
, um asynchrones Verhalten bereitzustellen.
Übergeben Sie den IAsyncResult
Rückgabewert an die EndRead Methode des Datenstroms, um zu bestimmen, wie viele Bytes gelesen wurden, und zum Freigeben von Betriebssystemressourcen, die zum Lesen verwendet werden. EndRead muss einmal für jeden Aufruf von BeginReadaufgerufen werden. Dazu können Sie entweder denselben Code verwenden, der aufgerufen BeginRead
hat, oder in einem an übergebenen BeginRead
Rückruf.
Die aktuelle Position im Stream wird aktualisiert, wenn der asynchrone Lese- oder Schreibvorgang ausgegeben wird, nicht nach Abschluss des E/A-Vorgangs.
Mehrere gleichzeitige asynchrone Anforderungen machen die Anforderungsvervollständigungsreihenfolge unsicher.
Verwenden Sie die CanRead -Eigenschaft, um zu bestimmen, ob die aktuelle instance Lesevorgänge unterstützt.
Wenn ein Stream geschlossen wird oder Sie ein ungültiges Argument übergeben, werden Ausnahmen sofort von BeginRead
ausgelöst. Fehler, die während einer asynchronen Leseanforderung auftreten, z. B. ein Datenträgerfehler während der E/A-Anforderung, treten im Threadpoolthread auf und lösen Beim Aufrufen EndRead
von Ausnahmen aus.