Wait Método (Object, Int32)
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, Int32)

 

Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo.Si transcurre el intervalo de tiempo de espera especificado, el subproceso entra en la cola de subprocesos listos.

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

public static bool Wait(
	object obj,
	int millisecondsTimeout
)

Parámetros

obj

Objeto en el que se va a esperar.

millisecondsTimeout

Número de milisegundos que se va a estar a la espera antes de que el subproceso entre en la cola de subprocesos listos.

Valor devuelto

Type: System.Boolean

Es true si se volvió a adquirir el bloqueo antes de que transcurriera el período de tiempo especificado; es false si se volvió a adquirir el bloqueo después de que transcurriera el período de tiempo especificado.El método no devuelve ningún resultado hasta que se vuelva a adquirir el bloqueo.

Exception Condition
ArgumentNullException

El parámetro obj es null.

SynchronizationLockException

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

ThreadInterruptedException

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

ArgumentOutOfRangeException

El valor de la millisecondsTimeout parámetro es negativo y no es igual a Infinite.

Este método no vuelve hasta que vuelve a adquirir un bloqueo exclusivo en el obj parámetro.

El subproceso que actualmente posee el bloqueo en el objeto especificado invoca a este método para liberar el objeto para que otro subproceso puede tener acceso a él.El autor de la llamada se bloquea mientras espera a adquirir el bloqueo.Se llama a este método cuando el llamador tiene que esperar para un cambio de estado que se producirá como resultado de las operaciones de otro subproceso.

El tiempo de espera garantiza que el subproceso actual no se bloquea indefinidamente si otro subproceso libera el bloqueo sin llamar primero a la Pulse o PulseAll (método).También desplaza el subproceso a la cola de subprocesos listos, pasando por alto otros subprocesos que estén antes en la cola de espera, por lo que puede volver a adquirir el bloqueo antes.El subproceso puede probar el valor devuelto de la Wait método para determinar si volvió a adquirir el bloqueo antes el tiempo de espera.El subproceso puede evaluar las condiciones que ha provocado que se especifique la espera y, si la llamada es necesario el Wait nuevo método.

Cuando un subproceso llama Wait, libera el bloqueo en el objeto y entra en cola de espera del objeto.El siguiente subproceso de cola de subprocesos listos del objeto (si hay alguno) adquiere el bloqueo y tiene uso exclusivo del objeto.El subproceso que invocó Wait permanece en la cola de espera hasta que un subproceso que retiene el bloqueo invoca PulseAll, o es el siguiente en la cola y un subproceso que retiene el bloqueo invoca Pulse.Sin embargo, si millisecondsTimeout transcurre antes de que otro subproceso invoque a este objeto Pulse o PulseAll método, el subproceso original se mueve a la cola de subprocesos listos para volver a adquirir el bloqueo.

System_CAPS_noteNota

Si Infinite se especifica para el millisecondsTimeout parámetro, este método se bloquea indefinidamente a menos que el propietario del bloqueo llama Pulse o PulseAll.Si millisecondsTimeout es igual a 0, el subproceso que llama Wait libera el bloqueo e inmediatamente después entra en la cola de subprocesos listos para volver a adquirir el bloqueo.

El llamador ejecuta Wait una vez, independientemente del número de veces que Enter se ha invocado para el objeto especificado.Conceptualmente, el Wait método almacena el número de veces que el llamador ha invocado Enter en el objeto e invoca Exit tantas veces como sea necesario para liberar completamente el objeto bloqueado.El autor de la llamada, a continuación, se bloquea mientras espera a adquirir el objeto.Cuando el llamador vuelve a adquirir el bloqueo, el sistema llama Enter tantas veces como sea necesario para restaurar el guardado Enter recuento para el llamador.Llamar a Wait libera el bloqueo para el objeto especificado; si el llamador es el propietario de los bloqueos sobre otros objetos, estos bloqueos no se liberan.

System_CAPS_noteNota

Un objeto sincronizado contiene varias referencias, incluida una referencia al subproceso que actualmente posee 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 están esperando recibir notificación de un cambio en el estado del objeto.

El Pulse, PulseAll, y Wait métodos deben invocarse desde dentro de un bloque de código sincronizado.

Los comentarios para el Pulse método explican lo que ocurre si Pulse se llama cuando no hay subprocesos en espera.

Universal Windows Platform
Disponible desde 4.5
.NET Framework
Disponible desde 1.1
Portable Class Library
Compatible con: portable .NET platforms
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar:
© 2016 Microsoft