Si el hilo quiere pausarse o continuar, ya he usado los dos métodos de Suspender y Reanudar antes, y utilizo estos dos métodos para operar el hilo, lo cual en realidad es problemático, y en ese momento no me importaba, así que ¡vamos a sacarlo y estudiarlo hoy!
¿Cuál es el problema de usar los dos métodos anteriores para suspender y continuar los hilos?
Por ejemplo, si llamamos al método Suspend para suspender el hilo, y luego llamamos inmediatamente al método Resume para continuar el hilo suspendido, entonces puede haber un problema.
Porque, después de llamar al método Suspender para suspender el hilo, este puede no suspenderse inmediatamente, aquí lleva tiempo de procesamiento; en este momento, llamas inmediatamente al método Recurre para continuar el hilo suspendido, ¡y el programa se colgará inmediatamente!
La explicación de Microsoft es:
No utilices los métodos Suspender y Reanudar para sincronizar la actividad del hilo. ¿Hay alguna forma de saber qué código es cuando pausas la ejecución del hilo? Si mantienes un bloqueo durante la evaluación de privilegios de seguridad, otros hilos en tu hilo suspendido en AppDomain pueden estar bloqueados. Si suspendes otros hilos en el AppDomain al ejecutar el constructor de clases, los intentos de usar la clase se bloquean. Los bloqueos pueden ocurrir fácilmente.
// Resumen: Continúa con el hilo suspendido. // Anomalía: T:System.Threading.ThreadStateException: El hilo no se ha iniciado, está muerto o no está en estado pendiente. // T:System.Security.SecurityException: El llamante no tiene el Sistema adecuado. Permisos.Permisos.Seguridad. [Obsoleto("Thread.Resume ha sido descontinuado. Por favor, utiliza otras clases en System.Threading, como Monitor, Mutex, Event y Semaphore, para sincronizar Hilos o proteger recursos. El inicio de sesión del hipervínculo es visible.", falso)] [SeguridadSeguroCrítico] currículum de vacío público (currículum); ¿Cómo resolver este problema?
Clase ManualResetEvent
Notifica a uno o más hilos en espera que ha ocurrido un evento. Estos tipos no pueden heredarse.
El código de prueba es el siguiente:
|