Sdílet prostřednictvím


Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Metoda

Definice

Zahájí asynchronní operaci čtení. (Zvažte místo toho použití 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

Parametry

buffer
Byte[]

Vyrovnávací paměť pro čtení dat.

offset
Int32

Posun bajtů, při buffer kterém se mají začít zapisovat data načtená z datového proudu.

count
Int32

Maximální počet bajtů ke čtení.

callback
AsyncCallback

Volitelné asynchronní zpětné volání, které se má volat po dokončení čtení.

state
Object

Uživatelem zadaný objekt, který odlišuje tento konkrétní asynchronní požadavek na čtení od ostatních požadavků.

Návraty

Představuje IAsyncResult asynchronní čtení, které může být stále čeká na vyřízení.

Výjimky

Došlo k pokusu o asynchronní čtení za koncem datového proudu nebo dojde k chybě disku.

Jeden nebo více argumentů je neplatných.

Metody byly volány po uzavření datového proudu.

Aktuální Stream implementace nepodporuje operaci čtení.

Poznámky

V rozhraní .NET Framework 4 a předchozích verzích je pro implementaci asynchronních vstupně-výstupních operací nutné použít metody, jako jsou BeginRead a EndRead. Tyto metody jsou stále k dispozici v rozhraní .NET Framework 4.5 pro podporu starší verze kódu; Nové asynchronní metody, jako ReadAsyncjsou , WriteAsyncCopyToAsync, a FlushAsync, však pomáhají snadněji implementovat asynchronní vstupně-výstupní operace.

Výchozí implementace BeginRead v datovém proudu volá metodu Read synchronně, což znamená, že Read to může u některých datových proudů blokovat. Instance tříd, jako FileStreamNetworkStream a , však plně podporují asynchronní operace, pokud instance byly otevřeny asynchronně. Volání metody proto nebudou BeginRead u těchto datových proudů blokovaná. Asynchronní chování můžete přepsat BeginRead (například pomocí asynchronních delegátů).

Předáním návratové IAsyncResult hodnoty metodě EndRead datového proudu určíte, kolik bajtů bylo přečteno, a uvolní prostředky operačního systému používané ke čtení. EndReadmusí být volána jednou pro každé volání .BeginRead Můžete to provést buď pomocí stejného kódu, který volal BeginRead , nebo ve zpětném volání předaném do BeginRead.

Aktuální pozice v datovém proudu se aktualizuje při asynchronním čtení nebo zápisu, ne při dokončení vstupně-výstupní operace.

Více souběžných asynchronních požadavků vykreslí pořadí dokončení požadavků na nejisté.

CanRead Pomocí vlastnosti určete, zda aktuální instance podporuje čtení.

Pokud je datový proud uzavřen nebo předáte neplatný argument, jsou výjimky vyvolány okamžitě z BeginRead. Chyby, ke kterým dochází během asynchronního požadavku na čtení, jako je například selhání disku během V/V požadavku, se vyskytují ve vlákně fondu vláken a při volání EndReadvyvolají výjimky .

Platí pro

Viz také