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

定義

開始非同步的讀取作業。 (請考慮用 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

參數

buffer
Byte[]

讀取資料的緩衝區。

offset
Int32

開始寫入自資料流讀取資料的 buffer 位元組位移。

count
Int32

要讀取的最大位元組數。

callback
AsyncCallback

選擇性的非同步回呼,在讀取完成時呼叫。

state
Object

使用者所提供的物件,其可以從其他要求中區分出這個特定非同步讀取的要求。

傳回

IAsyncResult

IAsyncResult,代表可能還在擱置中的非同步讀取。

例外狀況

嘗試超越資料流結尾的非同步讀取,或發生磁碟錯誤。

一或多個引數無效。

關閉資料流後呼叫了方法。

目前的 Stream 實作不支援讀取作業。

備註

在 .NET Framework 4 (含) 以前版本中,您必須使用方法 (例如 BeginReadEndRead ) 實作非同步 I/O 作業。 這些方法仍可在 .NET Framework 4.5 中取得,以支援舊版程式碼; 不過,新的非同步方法(例如 ReadAsyncWriteAsyncCopyToAsyncFlushAsync )可協助您更輕鬆地執行非同步 i/o 作業。

資料流程上的預設實值 BeginRead Read 會以同步方式呼叫方法,這表示 Read 可能會封鎖某些資料流程。 但是,如果實例已經以非同步方式開啟,則類別的實例(例如) FileStream NetworkStream 會完全支援非同步作業。 因此,對 BeginRead 這些資料流程的呼叫將不會封鎖。 您可以 BeginRead 使用非同步委派覆寫 (,例如) 以提供非同步行為。

將傳回 IAsyncResult 值傳遞給 EndRead 資料流程的方法,以判斷讀取的位元組數目,以及釋放用來讀取的作業系統資源。 EndRead 每次呼叫時,都必須呼叫一次 BeginRead 。 您可以使用在傳遞至的回呼中呼叫或的相同程式碼來進行這 BeginRead 項作業 BeginRead

發出非同步讀取或寫入時,不會更新資料流程中目前的位置,而不是在 i/o 作業完成時更新。

多個同時非同步要求會轉譯要求完成順序不確定。

CanRead 可以使用屬性來判斷目前的實例是否支援讀取。

如果資料流程已關閉或您傳遞不正確引數,則會立即擲回例外狀況 BeginRead 。 在非同步讀取要求期間發生的錯誤(例如,在 i/o 要求期間發生的磁片錯誤)會線上程集區執行緒上發生,並在呼叫時擲回例外狀況 EndRead

適用於

另請參閱