FileStream.EndRead(IAsyncResult) Metoda

Definicja

Czeka na zakończenie oczekującej asynchronicznej operacji odczytu.Waits for the pending asynchronous read operation to complete. (Rozważ użycie ReadAsync(Byte[], Int32, Int32, CancellationToken) zamiast niego).(Consider using ReadAsync(Byte[], Int32, Int32, CancellationToken) instead.)

public:
 override int EndRead(IAsyncResult ^ asyncResult);
public override int EndRead (IAsyncResult asyncResult);
override this.EndRead : IAsyncResult -> int
Public Overrides Function EndRead (asyncResult As IAsyncResult) As Integer

Parametry

asyncResult
IAsyncResult

Odwołanie do oczekującego żądania asynchronicznego oczekiwania.The reference to the pending asynchronous request to wait for.

Zwraca

Int32

Liczba bajtów odczytanych ze strumienia, z zakresu od 0 do liczby żądanych bajtów.The number of bytes read from the stream, between 0 and the number of bytes you requested. Strumienie zwracają tylko 0 na końcu strumienia, w przeciwnym razie powinny być blokowane do momentu, gdy jest dostępny co najmniej 1 bajt.Streams only return 0 at the end of the stream, otherwise, they should block until at least 1 byte is available.

Wyjątki

asyncResult to null.asyncResult is null.

Ten IAsyncResult obiekt nie został utworzony przez wywołanie BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) tej klasy.This IAsyncResult object was not created by calling BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) on this class.

EndRead(IAsyncResult) jest wywoływana wiele razy.EndRead(IAsyncResult) is called multiple times.

Strumień jest zamknięty lub wystąpił błąd wewnętrzny.The stream is closed or an internal error has occurred.

Przykłady

Ten przykład kodu jest częścią większego przykładu dostarczonego dla FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) konstruktora.This code example is part of a larger example provided for the FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) constructor.

   static void EndReadCallback( IAsyncResult^ asyncResult )
   {
      State^ tempState = dynamic_cast<State^>(asyncResult->AsyncState);
      int readCount = tempState->FStream->EndRead( asyncResult );
      int i = 0;
      while ( i < readCount )
      {
         if ( tempState->ReadArray[ i ] != tempState->WriteArray[ i++ ] )
         {
            Console::WriteLine( "Error writing data." );
            tempState->FStream->Close();
            return;
         }
      }

      Console::WriteLine( "The data was written to {0} "
      "and verified.", tempState->FStream->Name );
      tempState->FStream->Close();
      
      // Signal the main thread that the verification is finished.
      tempState->ManualEvent->Set();
   }


public:

static void EndReadCallback(IAsyncResult asyncResult)
{
    State tempState = (State)asyncResult.AsyncState;
    int readCount = tempState.FStream.EndRead(asyncResult);

    int i = 0;
    while(i < readCount)
    {
        if(tempState.ReadArray[i] != tempState.WriteArray[i++])
        {
            Console.WriteLine("Error writing data.");
            tempState.FStream.Close();
            return;
        }
    }
    Console.WriteLine("The data was written to {0} and verified.",
        tempState.FStream.Name);
    tempState.FStream.Close();

    // Signal the main thread that the verification is finished.
    tempState.ManualEvent.Set();
}
Private Shared Sub EndReadCallback(asyncResult As IAsyncResult)
     Dim tempState As State = _
         DirectCast(asyncResult.AsyncState, State)
     Dim readCount As Integer = _
         tempState.FStream.EndRead(asyncResult)

     Dim i As Integer = 0
     While(i < readCount)
         If(tempState.ReadArray(i) <> tempState.WriteArray(i))
             Console.WriteLine("Error writing data.")
             tempState.FStream.Close()
             Return
         End If
         i += 1
     End While

     Console.WriteLine("The data was written to {0} and " & _
         "verified.", tempState.FStream.Name)
     tempState.FStream.Close()

     ' Signal the main thread that the verification is finished.
     tempState.ManualEvent.Set()
 End Sub

Uwagi

W .NET Framework 4 i starszych wersjach trzeba użyć metod, takich jak BeginRead i, EndRead Aby zaimplementować asynchroniczne operacje na plikach.In the .NET Framework 4 and earlier versions, you have to use methods such as BeginRead and EndRead to implement asynchronous file operations. Te metody są nadal dostępne w .NET Framework 4,5 do obsługi starszego kodu; Jednak nowe metody asynchroniczne, takie jak,, ReadAsync , WriteAsync CopyToAsync i FlushAsync ułatwiają zaimplementowanie asynchronicznych operacji na plikach.These methods are still available in the .NET Framework 4.5 to support legacy code; however, the new async methods, such as ReadAsync, WriteAsync, CopyToAsync, and FlushAsync, help you implement asynchronous file operations more easily.

EndRead musi być wywoływana dokładnie dla każdego wywołania do BeginRead .EndRead must be called exactly for every call to BeginRead. Zakończenie procesu odczytu nie powiedzie się przed rozpoczęciem innego odczytu może spowodować niepożądane zachowanie, takie jak zakleszczenie.Failing to end a read process before beginning another read can cause undesirable behavior such as deadlock.

Ta metoda przesłania EndRead .This method overrides EndRead.

EndRead może być wywoływana dla każdego IAsyncResult z BeginRead .EndRead can be called on every IAsyncResult from BeginRead. Wywołanie informuje o liczbie EndRead bajtów odczytanych ze strumienia.Calling EndRead tells you how many bytes were read from the stream. EndRead zostanie zablokowany do momentu zakończenia operacji we/wy.EndRead will block until the I/O operation has completed.

Dotyczy