NetworkStream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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 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 debuffer
.ou - Le paramètre
size
est inférieur à 0.ou - Le paramètre
size
est supérieur à la longueur debuffer
moins la valeur du paramètreoffset
.
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.
Le NetworkStream est fermé.
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.