FileStream.EndRead(IAsyncResult) Méthode

Définition

Attend que l'opération de lecture asynchrone en attente se termine.Waits for the pending asynchronous read operation to complete. (Utilisez ReadAsync(Byte[], Int32, Int32, CancellationToken) à la place.)(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

Paramètres

asyncResult
IAsyncResult

Référence à la requête asynchrone en attente qu'il faut attendre.The reference to the pending asynchronous request to wait for.

Retours

Nombre d'octets lus dans le flux, entre 0 et le nombre d'octets demandés.The number of bytes read from the stream, between 0 and the number of bytes you requested. Les flux retournent 0 seulement à la fin du flux, sinon ils doivent être bloqués jusqu'à ce qu'au moins 1 octet soit disponible.Streams only return 0 at the end of the stream, otherwise, they should block until at least 1 byte is available.

Exceptions

asyncResult a la valeur null.asyncResult is null.

Cet objet IAsyncResult n’a pas été créé en appelant BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) sur cette classe.This IAsyncResult object was not created by calling BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) on this class.

EndRead(IAsyncResult) est appelé plusieurs fois.EndRead(IAsyncResult) is called multiple times.

Le flux est fermé ou une erreur interne s’est produite.The stream is closed or an internal error has occurred.

Exemples

Cet exemple de code fait partie d’un exemple plus complet fourni pour le constructeur 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

Remarques

Dans le .NET Framework 4 et les versions antérieures, vous devez utiliser des méthodes telles que BeginRead et EndRead pour implémenter des opérations de fichier asynchrones.In the .NET Framework 4 and earlier versions, you have to use methods such as BeginRead and EndRead to implement asynchronous file operations. Ces méthodes sont toujours disponibles dans le .NET Framework 4.5.NET Framework 4.5 pour prendre en charge le code hérité ; Toutefois, les nouvelles méthodes Async, telles que ReadAsync, WriteAsync, CopyToAsyncet FlushAsync, vous aident à implémenter des opérations de fichiers asynchrones plus facilement.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 doit être appelée exactement pour chaque appel à BeginRead.EndRead must be called exactly for every call to BeginRead. L’échec d’un processus de lecture avant le début d’une autre lecture peut entraîner un comportement indésirable, par exemple un interblocage.Failing to end a read process before beginning another read can cause undesirable behavior such as deadlock.

Cette méthode se substitue à EndRead.This method overrides EndRead.

EndRead peut être appelée à chaque IAsyncResult à partir de BeginRead.EndRead can be called on every IAsyncResult from BeginRead. L’appel de EndRead indique le nombre d’octets lus à partir du flux.Calling EndRead tells you how many bytes were read from the stream. EndRead est bloqué jusqu’à ce que l’opération d’e/s soit terminée.EndRead will block until the I/O operation has completed.

S’applique à

Voir aussi