Comment arrêter en toute sécurité un thread C # .NET s'exécutant dans un service Windows?

Je suis le maintien d'un bout de code qui ressemble à quelque chose comme ça. C'est un service Windows qui effectue des travaux, toutes les 30 minutes. Le ActualWorkDoneHere méthode prend environ 30 secondes à s'exécuter, mais si elle est arrêtée lors de l'exécution, il peut laisser les choses dans un mauvais état. Quelle est la meilleure façon d'empêcher que cela se produise? Devrais-je remplacer le While(true) avec une valeur de type boolean qui est à false dans la méthode onstop (suppression de l'Abandon de thread d'appel)? Est-il un moyen de savoir si un thread est de dormir?

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));
            }
        }
    }
}

source d'informationauteur Stimy | 2009-11-19