NetworkStream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) Metodo

Definizione

Avvia una scrittura asincrona in un flusso.

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

Parametri

buffer
Byte[]

Matrice di tipo Byte che contiene i dati da scrivere nella classe NetworkStream.

offset
Int32

Posizione in buffer da cui avviare l'invio dei dati.

sizecount
Int32

Numero di byte da scrivere nella classe NetworkStream.

callback
AsyncCallback

Il delegato AsyncCallback eseguito dopo il completamento del metodo BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object).

state
Object

Oggetto che contiene i dati aggiuntivi definiti dall'utente.

Restituisce

IAsyncResult

Oggetto IAsyncResult che rappresenta la chiamata asincrona.

Eccezioni

Il valore del parametro buffer è null.

Il parametro offset è minore di 0.

-oppure- Il parametro offset è maggiore della lunghezza di buffer.

-oppure- Il parametro size è minore di 0.

-oppure- Il parametro size è maggiore della lunghezza di buffer meno il valore del parametro offset.

L'oggetto Socket sottostante è chiuso.

-oppure- Si è verificato un errore durante la scrittura nella rete.

-oppure- Si è verificato un errore durante l'accesso al socket.

Esempio

Nell'esempio di codice seguente viene BeginWrite usato per scrivere dati in modo asincrono in un flusso di rete. Il myWriteCallBack metodo implementa il AsyncCallback delegato e viene chiamato dal sistema quando BeginWrite restituisce .

// 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

Commenti

Il BeginWrite metodo avvia un'operazione di invio asincrona all'host remoto. La chiamata al BeginWrite metodo consente di inviare dati all'interno di un thread di esecuzione separato.

È necessario creare un metodo di callback che implementa il AsyncCallback delegato e passarne il BeginWrite nome al metodo . Al minimo, il state parametro deve contenere .NetworkStream Se il callback necessita di altre informazioni, è possibile creare una classe o una struttura di piccole dimensioni per contenere NetworkStream e le altre informazioni necessarie. Passare la struttura o l'istanza della classe al BeginWrite metodo tramite il state parametro .

Il metodo di callback deve implementare il EndWrite metodo . Quando l'applicazione chiama BeginWrite, il sistema usa un thread separato per eseguire il metodo di callback specificato e si blocca fino EndWrite a quando non NetworkStream invia il numero di byte richiesti o genera un'eccezione. Se si vuole che il thread originale venga bloccato dopo aver chiamato il BeginWrite metodo , usare il WaitOne metodo . Chiamare Set nel metodo di callback quando si desidera che il thread originale continui l'esecuzione. Per altre informazioni sulla scrittura di metodi di callback, vedere Marshalling di un delegato come metodo di callback.

Nota

Se si riceve un IOExceptionoggetto , controllare la InnerException proprietà per determinare se è stata causata da un oggetto SocketException. In tal caso, usare la ErrorCode proprietà per ottenere il codice di errore specifico e fare riferimento alla documentazione del codice di errore dell'API Windows Sockets versione 2 per una descrizione dettagliata dell'errore.

Le operazioni di lettura e scrittura possono essere eseguite contemporaneamente in un'istanza della NetworkStream classe senza la necessità di sincronizzazione. Purché sia presente un thread univoco per le operazioni di scrittura e un thread univoco per le operazioni di lettura, non vi sarà alcuna interferenza incrociata tra thread di lettura e scrittura e non è necessaria alcuna sincronizzazione.

Si applica a

Vedi anche