NetworkStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Méthode

Définition

Démarre une lecture asynchrone de NetworkStream.Begins an asynchronous read from the NetworkStream.

public:
 override IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int size, AsyncCallback ^ callback, System::Object ^ state);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int size, AsyncCallback? callback, object? state);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int size, AsyncCallback callback, object state);
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginRead (buffer As Byte(), offset As Integer, size As Integer, callback As AsyncCallback, state As Object) As IAsyncResult

Paramètres

buffer
Byte[]

Tableau de type Byte qui correspond à l'emplacement dans la mémoire pour stocker des données lues à partir de NetworkStream.An array of type Byte that is the location in memory to store data read from the NetworkStream.

offset
Int32

Emplacement de buffer auquel commencer le stockage des données.The location in buffer to begin storing the data.

size
Int32

Nombre d'octets à lire à partir de NetworkStream.The number of bytes to read from the NetworkStream.

callback
AsyncCallback

Délégué AsyncCallback exécuté lorsque BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) se termine.The AsyncCallback delegate that is executed when BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) completes.

state
Object

Objet contenant toutes les données supplémentaires définies par l'utilisateur.An object that contains any additional user-defined data.

Retours

IAsyncResult

IAsyncResult qui représente l'appel asynchrone.An IAsyncResult that represents the asynchronous call.

Exceptions

Le paramètre buffer a la valeur null.The buffer parameter is null.

Le paramètre offset est inférieur à 0.The offset parameter is less than 0.

- ou --or- Le paramètre offset est supérieure à la longueur du paramètre buffer.The offset parameter is greater than the length of the buffer paramater.

- ou --or- size est inférieur à 0.The size is less than 0.

- ou --or- size est supérieur à la longueur de buffer moins la valeur du paramètre offset.The size is greater than the length of buffer minus the value of the offset parameter.

Le Socket sous-jacent est fermé.The underlying Socket is closed.

- ou --or- Une erreur s'est produite pendant la lecture à partir du réseau.There was a failure while reading from the network.

- ou --or- Une erreur s’est produite pendant l’accès au socket.An error occurred when accessing the socket.

Le NetworkStream est fermé.The NetworkStream is closed.

Exemples

L’exemple de code suivant utilise BeginRead pour lire des données de façon asynchrone à partir du flux réseau.The following code example uses BeginRead to read data asynchronously from the network stream. La myReadCallBack méthode implémente le AsyncCallback délégué et est appelée par le système lorsque BeginRead retourne.The myReadCallBack method implements the AsyncCallback delegate and is called by the system when BeginRead returns.

// Example of CanRead, and BeginRead.
// Check to see if this NetworkStream is readable.
if ( myNetworkStream->CanRead )
{
   array<Byte>^myReadBuffer = gcnew array<Byte>(1024);
   myNetworkStream->BeginRead( myReadBuffer, 0, myReadBuffer->Length, gcnew AsyncCallback( &MyNetworkStreamClass::myReadCallBack ), myNetworkStream );
   allDone->WaitOne();
}
else
{
   Console::WriteLine( "Sorry.  You cannot read from this NetworkStream." );
}
// Example of CanRead, and BeginRead.

// Check to see if this NetworkStream is readable.
if(myNetworkStream.CanRead){
    
    byte[] myReadBuffer = new byte[1024];
    myNetworkStream.BeginRead(myReadBuffer, 0, myReadBuffer.Length,
                                                 new AsyncCallback(NetworkStream_ASync_Send_Receive.myReadCallBack),
                                                 myNetworkStream);

    allDone.WaitOne();
}
else{
     Console.WriteLine("Sorry.  You cannot read from this NetworkStream.");
}

' Example of CanRead, and BeginRead.
' Check to see if this NetworkStream is readable.
If myNetworkStream.CanRead Then
   
   Dim myReadBuffer(1024) As Byte
   myNetworkStream.BeginRead(myReadBuffer, 0, myReadBuffer.Length, New AsyncCallback(AddressOf NetworkStream_ASync_Send_Receive.myReadCallBack), myNetworkStream)
   
   allDone.WaitOne()
Else
   Console.WriteLine("Sorry.  You cannot read from this NetworkStream.")
End If

Remarques

La BeginRead méthode démarre de façon asynchrone la lecture des données à partir des tampons réseau entrants.The BeginRead method starts asynchronously reading data from the incoming network buffers. L’appel de la BeginRead méthode vous donne la possibilité de recevoir des données dans un thread d’exécution distinct.Calling the BeginRead method gives you the ability to receive data within a separate execution thread.

Vous devez créer une méthode de rappel qui implémente le AsyncCallback délégué et passer son nom à la BeginRead méthode.You must create a callback method that implements the AsyncCallback delegate and pass its name to the BeginRead method. Au minimum, votre state paramètre doit contenir le NetworkStream .At the very minimum, your state parameter must contain the NetworkStream. Étant donné que vous souhaitez obtenir les données reçues dans votre méthode de rappel, vous devez créer une petite classe ou structure pour contenir une mémoire tampon de lecture et toute autre information utile.Because you will want to obtain the received data within your callback method, you should create a small class or structure to hold a read buffer and any other useful information. Transmettez la structure ou l’instance de classe à la BeginRead méthode via le state paramètre.Pass the structure or class instance to the BeginRead method through the state parameter.

Votre méthode de rappel doit appeler la EndRead méthode.Your callback method should call the EndRead method. Lorsque votre application appelle BeginRead , le système attend jusqu’à ce que les données soient reçues ou qu’une erreur se produise, puis le système utilise un thread distinct pour exécuter la méthode de rappel spécifiée et bloque le EndRead jusqu’à ce que le fourni NetworkStream lise les données ou lève une exception.When your application calls BeginRead, the system will wait until data is received or an error occurs, and then the system will use a separate thread to execute the specified callback method, and blocks on EndRead until the provided NetworkStream reads data or throws an exception. Si vous souhaitez que le thread d’origine se bloque après l’appel de la BeginRead méthode, utilisez la WaitOne méthode.If you want the original thread to block after you call the BeginRead method, use the WaitOne method. Appelez Set dans la méthode de rappel lorsque vous souhaitez que le thread d’origine continue à s’exécuter.Call Set in the callback method when you want the original thread to continue executing. Pour plus d’informations sur l’écriture des méthodes de rappel, consultez marshaling d’un délégué comme méthode de rappel.For additional information about writing callback methods, see Marshaling a Delegate as a Callback Method.

La BeginRead méthode lit autant de données que possible, jusqu’au nombre d’octets spécifié par le size paramètre.The BeginRead method reads as much data as is available, up to the number of bytes specified by the size parameter.

Notes

Si vous recevez un IOException , vérifiez la InnerException propriété pour déterminer si elle a été provoquée par un SocketException .If you receive an IOException, check the InnerException property to determine if it was caused by a SocketException. Si c’est le cas, utilisez la ErrorCode propriété pour obtenir le code d’erreur spécifique et reportez-vous à la documentation sur les codes d’erreur de l' API Windows Sockets version 2 pour obtenir une description détaillée de l’erreur.If so, use the ErrorCode property to obtain the specific error code and refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Les opérations de lecture et d’écriture peuvent être effectuées simultanément sur une instance de la NetworkStream classe sans nécessiter de synchronisation.Read and write operations can be performed simultaneously on an instance of the NetworkStream class without the need for synchronization. Tant qu’il existe un seul thread unique pour les opérations d’écriture et un seul thread unique pour les opérations de lecture, il n’y aura aucune interférence entre les threads de lecture et d’écriture et aucune synchronisation n’est requise.As long as there is one unique thread for the write operations and one unique thread for the read operations, there will be no cross-interference between read and write threads and no synchronization is required.

S’applique à

Voir aussi