.net - detener - destruir un hilo c#
¿Cuál es la mejor manera de hacer que un hilo señale otro hilo en.NET? (6)
Depende de qué tipo de sincronización necesita. Si desea poder ejecutar el hilo en un bucle hasta que se alcance algún tipo de final de ejecución, todo lo que necesita es una variable bool estática. Si desea que un subproceso espere hasta que otro subproceso llegue a un punto en ejecución, es posible que desee utilizar WaitEvents (AutoResetEvent o ManualResetEvent). Si necesita esperar múltiples gestos de espera, puede usar WaitHandle.WaitAll o WaitHandle.WaitAny.
Necesito tener una señal de hilo otra si el usuario desea interrumpir la ejecución, sin embargo, no estoy seguro acerca de cómo implementar el mecanismo de señalización / verificación de señal. No me gustaría tener un singleton en mi proyecto (como un bool
global), pero ¿hay alguna alternativa?
En este hilo, la gente sugiere estructuras adecuadas para eso en C ++, pero no conozco nada similar en .NET. ¿Podría alguien por favor arrojar algo de luz?
Mire el espacio de nombres System.Runtime.Remoting.
Mire en Monitor.Wait y Monitor.Pulse. Aquí hay un excelente artículo sobre Threading en .Net (muy legible): http://www.albahari.com/threading/part4.aspx
Pruebe BackgroundWorker . Es compatible con las actualizaciones de progreso y la cancelación de una tarea en ejecución.
Si desea que un subproceso espere hasta que otro subproceso haya terminado de hacerlo, entonces Monitor.Wait y Monitor.Pulse son buenos, al igual que ManualResetEvent. Sin embargo, estos no son realmente útiles para cancelar una tarea en ejecución.
Si desea escribir su propio código de cancelación, podría simplemente tener un campo en el que ambos subprocesos tengan acceso. Marcarlo volátil, por ejemplo:
private volatile bool cancelling;
Haga que el hilo principal lo establezca en verdadero y haga que el hilo del trabajador lo revise periódicamente y lo configure en falso cuando haya terminado.
Esto no es realmente comparable a tener una ''variable global'', ya que aún se puede limitar el alcance de la variable del semáforo para que sea privado para una clase.
Un poco vago (falta de tiempo), pero mira en ManualResetEvent y AutoResetEvent . También es posible que desee buscar Monitor y bloquear palabra clave.
Una solución simple, como un booleano estático sincronizado, debería ser todo lo que necesita en lugar de una solución basada en el marco que podría ser excesiva para su escenario. En caso de que aún desee un marco, eche un vistazo a las extensiones paralelas a .NET para obtener ideas.