FileStream.EndRead(IAsyncResult) Methode

Definition

Wartet, bis der ausstehende asynchrone Lesevorgang abgeschlossen ist.Waits for the pending asynchronous read operation to complete. (Verwenden Sie stattdessen ReadAsync(Byte[], Int32, Int32, CancellationToken).)(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

Parameter

asyncResult
IAsyncResult

Der Verweis auf die ausstehende asynchrone Anforderung, die abgewartet werden soll.The reference to the pending asynchronous request to wait for.

Gibt zurück

Die Anzahl der aus dem Stream gelesenen Bytes. Diese Anzahl kann zwischen 0 und der Anzahl der angeforderten Bytes liegen.The number of bytes read from the stream, between 0 and the number of bytes you requested. Streams geben nur am Ende des Streams 0 zurück, andernfalls sollten sie blockieren, bis mindestens 1 Byte verfügbar ist.Streams only return 0 at the end of the stream, otherwise, they should block until at least 1 byte is available.

Ausnahmen

asyncResult ist null.asyncResult is null.

Dieses IAsyncResult-Objekt wurde nicht durch Aufrufen von BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) für diese Klasse erstellt.This IAsyncResult object was not created by calling BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) on this class.

EndRead(IAsyncResult) wird mehrmals aufgerufen.EndRead(IAsyncResult) is called multiple times.

Der Stream ist geschlossen, oder ein interner Fehler ist aufgetreten.The stream is closed or an internal error has occurred.

Beispiele

Dieses Codebeispiel ist Teil eines größeren Beispiels, das für den FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean)-Konstruktor bereitgestellt wird.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

Hinweise

In der .NET Framework 4 und früheren Versionen erforderlich, wie z. B. BeginRead und EndRead , asynchrone Datei-Vorgänge zu implementieren.In the .NET Framework 4 and earlier versions, you have to use methods such as BeginRead and EndRead to implement asynchronous file operations. Diese Methoden sind weiterhin im .NET Framework 4.5.NET Framework 4.5 verfügbar, um Legacy Code zu unterstützen. die neuen Async-Methoden, wie z. b. ReadAsync, WriteAsync, CopyToAsyncund FlushAsync, unterstützen Sie jedoch bei der einfacheren Implementierung asynchroner Datei Vorgänge.These methods are still available in the .NET Framework 4.5.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 müssen für jeden Aufruf von BeginReadexakt aufgerufen werden.EndRead must be called exactly for every call to BeginRead. Wenn ein Lesevorgang nicht beendet wird, bevor ein anderer Lesevorgang gestartet wird, kann dies unerwünschte Verhalten wie Deadlocks verursachen.Failing to end a read process before beginning another read can cause undesirable behavior such as deadlock.

Diese Methode überschreibt EndRead.This method overrides EndRead.

EndRead können für jede IAsyncResult von BeginReadaufgerufen werden.EndRead can be called on every IAsyncResult from BeginRead. Der Aufruf von EndRead gibt Aufschluss darüber, wie viele Bytes aus dem Stream gelesen wurden.Calling EndRead tells you how many bytes were read from the stream. EndRead wird blockiert, bis der e/a-Vorgang abgeschlossen ist.EndRead will block until the I/O operation has completed.

Gilt für:

Siehe auch