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

Définition

Démarre une écriture asynchrone dans un flux.

public:
 override IAsyncResult ^ BeginWrite(cli::array <System::Byte> ^ buffer, int offset, int size, AsyncCallback ^ callback, System::Object ^ state);
public:
 override IAsyncResult ^ BeginWrite(cli::array <System::Byte> ^ buffer, int offset, int count, 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 count, 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
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
Public Overrides Function BeginWrite (buffer As Byte(), offset As Integer, count 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.

offset
Int32

Emplacement de buffer auquel commencer l'envoi des données.

sizecount
Int32

Nombre d'octets à écrire dans NetworkStream.

callback
AsyncCallback

Délégué AsyncCallback exécuté lorsque BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) se termine.

state
Object

Objet contenant toutes les données supplémentaires définies par l'utilisateur.

Retours

IAsyncResult

IAsyncResult qui représente l'appel asynchrone.

Exceptions

Le paramètre buffer a la valeur null.

Le paramètre offset est inférieur à 0.

  • ou - Le paramètre offset est supérieur à la longueur de buffer.

  • ou - Le paramètre size est inférieur à 0.

  • ou - Le paramètre size est supérieur à la longueur de buffer moins la valeur du paramètre offset.

Le Socket sous-jacent est fermé.

  • ou - Une erreur s'est produite pendant l'écriture sur le réseau.

  • ou - Une erreur s’est produite pendant l’accès au socket.

Exemples

L’exemple de code suivant utilise BeginWrite pour écrire des données de manière asynchrone dans un flux réseau. La myWriteCallBack méthode implémente le AsyncCallback délégué et est appelée par le système quand BeginWrite elle est retournée.

// 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. L’appel de la BeginWrite méthode vous permet d’envoyer des données dans un thread d’exécution distinct.

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. Au minimum, votre state paramètre doit contenir le NetworkStream. Si votre rappel a besoin de plus d’informations, vous pouvez créer une petite classe ou une structure pour contenir les NetworkStream informations et les autres informations requises. Transmettez la structure ou l’instance de classe à la BeginWrite méthode via le state paramètre.

Votre méthode de rappel doit implémenter la EndWrite méthode. Lorsque votre application appelle BeginWrite, le système utilise un thread distinct pour exécuter la méthode de rappel spécifiée et se bloque EndWrite jusqu’à ce que le NetworkStream nombre d’octets demandés ou lève une exception. Si vous souhaitez que le thread d’origine soit bloqué après avoir appelé la BeginWrite méthode, utilisez la WaitOne méthode. Appelez Set la méthode de rappel lorsque vous souhaitez que le thread d’origine continue à s’exécuter. Pour plus d’informations sur l’écriture de méthodes de rappel, consultez 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. Si c’est le cas, utilisez la ErrorCode propriété pour obtenir le code d’erreur spécifique et reportez-vous à la documentation du code d’erreur de l’API Windows Sockets version 2 pour obtenir une description détaillée de l’erreur.

Les opérations de lecture et d’écriture peuvent être effectuées simultanément sur une instance de la NetworkStream classe sans avoir besoin de synchronisation. Tant qu’il existe un thread unique pour les opérations d’écriture et un thread unique pour les opérations de lecture, il n’y aura aucune interférence croisée entre les threads de lecture et d’écriture et aucune synchronisation n’est nécessaire.

S’applique à

Voir aussi