FileStream.EndRead(IAsyncResult) Yöntem

Tanım

Bekleyen zaman uyumsuz okuma işleminin tamamlanmasını bekler.Waits for the pending asynchronous read operation to complete. ( ReadAsync(Byte[], Int32, Int32, CancellationToken) Bunun yerine kullanmayı düşünün.)(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

Parametreler

asyncResult
IAsyncResult

Bekleyen zaman uyumsuz isteğin için beklediği başvuru.The reference to the pending asynchronous request to wait for.

Döndürülenler

Int32

Akıştan okunan bayt sayısı, 0 ile istediğiniz bayt sayısı arasında.The number of bytes read from the stream, between 0 and the number of bytes you requested. Akışlar akışın sonunda yalnızca 0 döndürür, aksi takdirde, en az 1 bayt kullanılabilir olana kadar blok olmalıdır.Streams only return 0 at the end of the stream, otherwise, they should block until at least 1 byte is available.

Özel durumlar

asyncResult, null değeridir.asyncResult is null.

Bu IAsyncResult nesne, BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Bu sınıf üzerinde çağırarak oluşturulmamış.This IAsyncResult object was not created by calling BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) on this class.

EndRead(IAsyncResult) birden çok kez çağrıldı.EndRead(IAsyncResult) is called multiple times.

Akış kapalı veya bir iç hata oluştu.The stream is closed or an internal error has occurred.

Örnekler

Bu kod örneği, Oluşturucu için sağlanmış daha büyük bir örneğin bir parçasıdır FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) .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

Açıklamalar

.NET Framework 4 ve önceki sürümlerde, BeginRead EndRead zaman uyumsuz dosya işlemlerini uygulamak için ve gibi yöntemleri kullanmanız gerekir.In the .NET Framework 4 and earlier versions, you have to use methods such as BeginRead and EndRead to implement asynchronous file operations. Bu yöntemler, eski kodu desteklemek için .NET Framework 4,5 ' de hala kullanılabilir; Ancak,, ve gibi yeni zaman uyumsuz yöntemler ReadAsync , WriteAsync CopyToAsync FlushAsync zaman uyumsuz dosya işlemlerini daha kolay uygulamanıza yardımcı olur.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 her çağrısı için tam olarak çağrılmalıdır BeginRead .EndRead must be called exactly for every call to BeginRead. Başka bir okuma işlemine başlamadan önce okuma işleminin sonlandırlamaması, kilitlenme gibi istenmeyen davranışlara neden olabilir.Failing to end a read process before beginning another read can cause undesirable behavior such as deadlock.

Bu yöntem geçersiz kılınır EndRead .This method overrides EndRead.

EndRead , öğesinden her öğesinden çağrılabilir IAsyncResult BeginRead .EndRead can be called on every IAsyncResult from BeginRead. Çağıran EndRead akıştan kaç baytlık okunan size bildirir.Calling EndRead tells you how many bytes were read from the stream. EndRead g/ç işlemi tamamlanana kadar engeller.EndRead will block until the I/O operation has completed.

Şunlara uygulanır