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

Définition

Démarre une écriture asynchrone dans un flux.Begins an asynchronous write to a stream.

public:
 override IAsyncResult ^ BeginWrite(cli::array <System::Byte> ^ buffer, int offset, int size, AsyncCallback ^ callback, System::Object ^ state);
public override IAsyncResult BeginWrite (byte[] buffer, int offset, int size, AsyncCallback? callback, object? state);
public override IAsyncResult BeginWrite (byte[] buffer, int offset, int size, AsyncCallback callback, object state);
override this.BeginWrite : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginWrite (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 contient les données à écrire dans NetworkStream.An array of type Byte that contains the data to write to the NetworkStream.

offset
Int32

Emplacement de buffer auquel commencer l'envoi des données.The location in buffer to begin sending the data.

size
Int32

Nombre d'octets à écrire dans NetworkStream.The number of bytes to write to the NetworkStream.

callback
AsyncCallback

Délégué AsyncCallback exécuté lorsque BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) se termine.The AsyncCallback delegate that is executed when BeginWrite(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érieur à la longueur de buffer.The offset parameter is greater than the length of buffer.

- ou --or- Le paramètre size est inférieur à 0.The size parameter is less than 0.

- ou --or- Le paramètre size est supérieur à la longueur de buffer moins la valeur du paramètre offset.The size parameter 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 l'écriture sur le réseau.There was a failure while writing to 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 BeginWrite pour écrire des données de façon asynchrone dans un flux réseau.The following code example uses BeginWrite to write data asynchronously to a network stream. La myWriteCallBack méthode implémente le AsyncCallback délégué et est appelée par le système lorsque BeginWrite retourne.The myWriteCallBack method implements the AsyncCallback delegate and is called by the system when BeginWrite returns.

// Example of CanWrite, and BeginWrite.
// Check to see if this NetworkStream is writable.
if ( myNetworkStream->CanWrite )
{
   array<Byte>^myWriteBuffer = Encoding::ASCII->GetBytes( "Are you receiving this message?" );
   myNetworkStream->BeginWrite( myWriteBuffer, 0, myWriteBuffer->Length, gcnew AsyncCallback( &MyNetworkStreamClass::myWriteCallBack ), myNetworkStream );
   allDone->WaitOne();
}
else
{
   Console::WriteLine( "Sorry.  You cannot write to this NetworkStream." );
}
//Example of CanWrite, and BeginWrite.

 // Check to see if this NetworkStream is writable.
 if (myNetworkStream.CanWrite){

      byte[] myWriteBuffer = Encoding.ASCII.GetBytes("Are you receiving this message?");
      myNetworkStream.BeginWrite(myWriteBuffer, 0, myWriteBuffer.Length,
                                                   new AsyncCallback(NetworkStream_ASync_Send_Receive.myWriteCallBack),
                                                   myNetworkStream);
      allDone.WaitOne();
 }
 else{
      Console.WriteLine("Sorry.  You cannot write to this NetworkStream.");
 }

' Example of CanWrite, and BeginWrite.
' Check to see if this NetworkStream is writable.
If myNetworkStream.CanWrite Then
   
   Dim myWriteBuffer As Byte() = Encoding.ASCII.GetBytes("Are you receiving this message?")
   myNetworkStream.BeginWrite(myWriteBuffer, 0, myWriteBuffer.Length, New AsyncCallback(AddressOf NetworkStream_ASync_Send_Receive.myWriteCallBack), myNetworkStream)
   allDone.WaitOne()
Else
   Console.WriteLine("Sorry.  You cannot write to this NetworkStream.")
End If

Remarques

La BeginWrite méthode démarre une opération d’envoi asynchrone à l’hôte distant.The BeginWrite method starts an asynchronous send operation to the remote host. L’appel de la BeginWrite méthode vous donne la possibilité d’envoyer des données dans un thread d’exécution distinct.Calling the BeginWrite method gives you the ability to send 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 BeginWrite méthode.You must create a callback method that implements the AsyncCallback delegate and pass its name to the BeginWrite method. Au minimum, votre state paramètre doit contenir le NetworkStream .At the very minimum, your state parameter must contain the NetworkStream. Si votre rappel a besoin d’informations supplémentaires, vous pouvez créer une petite classe ou structure pour contenir le NetworkStream et les autres informations requises.If your callback needs more information, you can create a small class or structure to hold the NetworkStream and the other required information. Transmettez la structure ou l’instance de classe à la BeginWrite méthode via le state paramètre.Pass the structure or class instance to the BeginWrite method through the state parameter.

Votre méthode de rappel doit implémenter la EndWrite méthode.Your callback method should implement the EndWrite method. Lorsque votre application appelle BeginWrite , le système utilise un thread distinct pour exécuter la méthode de rappel spécifiée et bloque EndWrite jusqu’à ce que le NetworkStream envoie le nombre d’octets demandés ou lève une exception.When your application calls BeginWrite, the system uses a separate thread to execute the specified callback method, and blocks on EndWrite until the NetworkStream sends the number of bytes requested or throws an exception. Si vous souhaitez que le thread d’origine se bloque après l’appel de la BeginWrite méthode, utilisez la WaitOne méthode.If you want the original thread to block after you call the BeginWrite 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.

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