Estoy manteniendo un código que se parece a esto. Es un servicio de Windows que hace algo de trabajo cada 30 minutos. El método ActualWorkDoneHere tarda unos 30 segundos en ejecutarse, pero si se detiene mientras se ejecuta, puede dejar cosas en mal estado. ¿Cuál es la mejor manera de evitar que eso suceda? ¿Debo reemplazar el While (verdadero) con un booleano que está configurado como falso en el método onstop (eliminando el hilo de la llamada Abort)? ¿Hay alguna forma de saber si un hilo está durmiendo?¿Cómo puedo detener con seguridad un hilo de C# .NET que se ejecuta en un servicio de Windows?
namespace WorkService
{
public partial class WorkService : ServiceBase
{
private Thread _workerThread = null;
public WorkService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_workerThread = new Thread(new ThreadStart(DoWork));
_workerThread.Start();
}
protected override void OnStop()
{
_workerThread.Abort();
}
static void DoWork()
{
int sleepMinutes = 30;
while (true)
{
ActualWorkDoneHere();
System.Threading.Thread.Sleep(new TimeSpan(0, sleepMinutes, 0));
}
}
}
}
Esto parece un trabajo para el programador de tareas! :) –
@Greg ¿El Programador de tareas no se ejecuta según un cronograma? En este caso Stimy está buscando pausar por 30 minutos y luego ejecutar nuevamente, no ejecutar cada 30 minutos independientemente. – Junto