Pregunta

Necesito que un hilo señale a otro si el usuario desea interrumpir la ejecución, sin embargo, no estoy seguro 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 global bool), pero ¿existe alguna alternativa?

En este hilo la gente sugiere estructuras adecuadas para eso en C++, pero no conozco nada similar en .NET.¿Alguien podría arrojar algo de luz?

¿Fue útil?

Solución

Probar FondoTrabajador.Admite actualizaciones de progreso y cancelación de una tarea en ejecución.

Si desea que un subproceso espere hasta que otro subproceso haya terminado de hacer su trabajo, 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 tener un campo en algún lugar al que ambos hilos tengan acceso.Márquelo como volátil, por ejemplo:

private volatile bool cancelling;

Haga que el hilo principal lo establezca en verdadero y que el hilo de trabajo lo revise periódicamente y lo establezca en falso cuando haya terminado.

Esto no es realmente comparable a tener una 'variable global', ya que aún puede limitar el alcance de la variable de semáforo para que sea privada para una clase.

Otros consejos

Un poco vago (falta de tiempo), pero investiga ManualResetEvent y AutoResetEvent.También es posible que desee buscar la palabra clave Monitorear y bloquear.

Mire Monitor.Wait y Monitor.Pulse.Aquí hay un excelente artículo sobre Threading en .Net (muy legible): http://www.albahari.com/threading/part4.aspx

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 un marco que podría ser excesiva para su escenario.En caso de que todavía quieras un marco, echa un vistazo a extensiones paralelas a .NET para ideas.

Depende del tipo de sincronización que necesites.Si desea poder ejecutar un 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 alcance un punto de ejecución, es posible que desee utilizar WaitEvents (AutoResetEvent o ManualResetEvent).Si necesita esperar varios waitHandles, puede usar WaitHandle.WaitAll o WaitHandle.WaitAny.

Mire el espacio de nombres System.Runtime.Remoting.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top