Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Monitor.Wait (Método) (Object)

Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo.

Espacio de nombres:  System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

public static bool Wait(
	Object obj
)

Parámetros

obj
Tipo: System.Object
Objeto en el que se va a esperar.

Valor devuelto

Tipo: System.Boolean
true si la llamada fue devuelta porque el llamador volvió a adquirir el bloqueo para el objeto especificado. Este método no devuelve ningún resultado si el bloqueo no vuelve a adquirirse.

ExcepciónCondición
ArgumentNullException

El valor del parámetro obj es null.

SynchronizationLockException

El subproceso que realiza la llamada no posee el bloqueo del objeto especificado.

ThreadInterruptedException

El subproceso que invoca a Wait se interrumpe más adelante desde el estado de espera. Esto ocurre cuando otro subproceso llama al método Interrupt de este subproceso.

El subproceso que actualmente posee el bloqueo en el objeto especificado invoca a este método para liberar el objeto de modo que otro subproceso puede obtener acceso al mismo. El llamador, mientras espera a volver a adquirir el bloqueo, permanece bloqueado. Se llama a este método cuando el llamador tiene que esperar un cambio de estado que se producirá como resultado de otras operaciones de subproceso.

Cuando un subproceso llama a Wait, libera el bloqueo en el objeto y entra en la cola de espera del objeto. El siguiente subproceso de la cola de espera del objeto (si lo hubiera) adquiere el bloqueo y dispone de un uso exclusivo del objeto. Todos los subprocesos que llaman a Wait permanecen en la cola de espera hasta que reciben una señal de Pulse o PulseAll, enviada por el propietario del bloqueo. Si se envía Pulse, el subproceso situado al principio de la cola de espera es el único que se ve afectado. Si se envía PulseAll, todos los subprocesos que se encuentran en espera del objeto se ven afectados. Cuando se recibe la señal, uno o más subprocesos abandonan la cola de espera y entran en la cola de subprocesos listos. Los subprocesos que se encuentran en la cola de subprocesos listos pueden volver a adquirir el bloqueo.

Este método devuelve un resultado cuando el subproceso que realiza la llamada vuelve a adquirir el bloqueo sobre el objeto. Tenga en cuenta que este método se bloquea de forma indefinida si el propietario del bloqueo no llama a Pulse o PulseAll.

El llamador ejecuta Wait una sola vez, independientemente del número de veces que haya invocado al método Enter para el objeto especificado. Conceptualmente, el método Wait almacena el número de veces que el llamador ha invocado a Enter en el objeto e invoca a Exit las veces que sean necesarias para liberar completamente el objeto bloqueado. Después, el llamador, mientras permanece a la espera para volver a adquirir el objeto, se bloquea. Cuando el llamador vuelve a adquirir el bloqueo, el sistema llama a Enter las veces que sean necesarias para restaurar el recuento de Enter guardado para el llamador. Una llamada a Wait libera el bloqueo sólo del objeto especificado; si el llamador es el propietario de los bloqueos sobre otros objetos, estos bloqueos no se liberan.

Hay que tener en cuenta que un objeto sincronizado contiene varias referencias, entre ellas, una referencia al subproceso que actualmente contiene el bloqueo, una referencia a la cola de subprocesos listos que contiene los subprocesos que están listos para obtener el bloqueo y una referencia a la cola de espera que contiene los subprocesos que se encuentran a la espera de recibir una notificación de cambio de estado del objeto.

Debe invocarse a los métodos: Pulse, PulseAll y Wait desde el interior de un bloque de código sincronizado.

Los comentarios del método Pulse explican lo que sucedería si se llamara a Pulse cuando no hay subprocesos en espera.

.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft