necesito que el Loop no se detenga a menos que se haga true la cancelación...
Si es una necesidad del tipo "hasta que..." en vez de "mientras que...", entonces puedes hacer el código algo más comprensible de la siguiente manera:
Do Until MyWorker.CancellationPending
...
Loop
Me surge algunas dudas cuando trato de aplicarlo en mi proyecto.
Para hacer una pausa (o dicho de otra forma: bloquear la ejecución del hilo actual) durante un intervalo definido (ej. 5 segundos) debes utilizar el método
System.Threading.Thread.Sleep():
Sleep(TimeSpan.FromSeconds(5))
CheckProcess()
El uso que le doy a la class
ManualResetEvent es para implementar una funcionalidad de pausar/continuar
a demanda o petición del usuario, puesto que el método
ManualResetEvent.WaitOne() sirve para bloquear la ejecución del thread durante un tiempo indefinido
hasta que se reciba una señal llamando a
ManualResetEvent.Set(), por eso si te fijas en mi ejemplo uso la constante de tiempo infinito
System.Threading.Timeout.Infinite.
Si tu especificas
5000 ms en el parámetro del método
ManualResetEvent.WaitOne(), con eso le estás diciendo que el hilo debe esperar hasta que transcurra ese intervalo de tiempo definido o hasta recibir una señal durante ese tiempo, y si no recibe una señal durante ese tiempo se resumirá el hilo, esto quiere decir que le estás dando la misma funcionalidad que si utilizases el método
System.Threading.Thread.Sleep(), pero no debes hacerlo, primeramente por que es innecesario, segundo por que es de buena costumbre utilizar el método más apropiado para "X" finalidad y en este caso el método
System.Threading.Thread.Sleep() es el que ha sido diseñado para dicha finalidad, y tercero por que podría ocasionarte un comportamiento indebido por culpa de un fallo de lógica humana, por ejemplo si enviases una señal en otra parte del código durante ese intervalo de tiempo.
Tengo otro sub que igual verifica los módulos de una aplicación que supongo tendria que hacer otro backgroundworker
Depende del propósito del código, pero ya estás corriendo la tarea de la "verificación de procesos" en un hilo secundario ...puedes llevar a cabo la "verificación de módulos" de forma sincrónica si eso no te suponiese inconvenientes.
Saludos!