Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

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

 

Publicado: octubre de 2016

Comienza una escritura asincrónica en una secuencia.

Espacio de nombres:   System.Net.Sockets
Ensamblado:  System (en System.dll)

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public override IAsyncResult BeginWrite(
	byte[] buffer,
	int offset,
	int size,
	AsyncCallback callback,
	object state
)

Parámetros

buffer
Type: System.Byte[]

Matriz de tipo Byte que contiene los datos para escribir en el NetworkStream.

offset
Type: System.Int32

La ubicación en buffer para comenzar a enviar los datos.

size
Type: System.Int32

El número de bytes que se va a escribir en el NetworkStream.

callback
Type: System.AsyncCallback

El AsyncCallback delegado que es ejecutado cuando BeginWrite completa.

state
Type: System.Object

Objeto que contiene datos adicionales definidos por el usuario.

Valor devuelto

Type: System.IAsyncResult

Un IAsyncResult que representa la llamada asincrónica.

Exception Condition
ArgumentNullException

El parámetro buffer es null.

ArgumentOutOfRangeException

El offset parámetro es menor que 0.

O bien

El offset es mayor que la longitud del parámetro buffer.

O bien

El size parámetro es menor que 0.

O bien

El size es mayor que la longitud del parámetro buffer menos el valor de la offset parámetro.

IOException

Subyacente Socket se cierra.

O bien

Se produjo un error al escribir en la red.

-o-

Se produjo un error al acceder al socket. Vea la sección Comentarios para obtener más información.

ObjectDisposedException

El NetworkStream se cierra.

El BeginWrite método inicia una operación de envío asincrónica al host remoto. Llamar a la BeginWrite método ofrece la posibilidad de enviar datos en un subproceso de ejecución independiente.

Debe crear un método de devolución de llamada que implementa el AsyncCallback y pasar su nombre a la BeginWrite (método). Como mínimo, su state parámetro debe contener el NetworkStream. Si la devolución de llamada necesita más información, puede crear una pequeña clase o estructura que contenga el NetworkStream y otra información necesaria. Pase la instancia de clase o estructura a la BeginWrite método a través de la state parámetro.

El método de devolución de llamada debe implementar el EndWrite método. Cuando la aplicación llama BeginWrite, el sistema utiliza un subproceso independiente para ejecutar el método de devolución de llamada especificado y se bloquea en EndWrite hasta que el NetworkStream envía el número de bytes solicitados o produce una excepción. Si desea que el subproceso original se bloquee después de llamar a la BeginWrite (método), utilice la WaitOne método. Llamar a Set en el método de devolución de llamada cuando desee que el subproceso original continúe ejecutándose. Para obtener información adicional acerca de cómo escribir métodos de devolución de llamada, consulte Marshaling a Delegate as a Callback Method.

System_CAPS_noteNota

Si recibe un IOException, compruebe la InnerException propiedad para determinar si fue provocada por una SocketException. Si es así, utilice el ErrorCode propiedad para obtener el código de error concreto y consulte en MSDN la documentación de los códigos de error de la API Windows Sockets versión 2 para obtener una descripción detallada del error.

Lectura y escritura de las operaciones se pueden realizar simultáneamente en una instancia de la NetworkStream clase sin la necesidad de sincronización. Mientras hay un subproceso único para las operaciones de escritura y un subproceso único para las operaciones de lectura, no habrá ninguna interferencia cruzada entre lectura y escritura subprocesos y ninguna sincronización es necesaria.

El siguiente ejemplo de código utiliza BeginWrite para escribir datos asincrónicamente en una secuencia de red. El myWriteCallBack método implementa el AsyncCallback delegar y es llamado por el sistema cuando BeginWrite devuelve.

//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.");  
 }

.NET Framework
Disponible desde 1.1
Volver al principio
Mostrar: