Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 29278|Respuesta: 2

[Fuente] .net/c# Hilos de hilos Suspender y Reanudar soluciones obsoletas

[Copiar enlace]
Publicado en 17/5/2018 9:36:10 | | | |
Thread.Suspend 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.
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.
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:








Anterior:C# envía mensajes de texto a teléfonos móviles
Próximo:SQL elimina espacios de los datos
 Propietario| Publicado en 17/5/2018 21:14:51 |
_event. Set(); es continuar el hilo
_event. Reinicio(); es suspender el hilo
 Propietario| Publicado en 29/5/2018 14:58:49 |
Si obtienes el ID del hilo actual, usa :

Thread.CurrentThread.ManagedThreadId.ToString() (recomendado)
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com