2017-05-03 2 views
0

J'ai une méthode qui s'exécute en environ 10 minutes. Et ça va bien, tout seul. J'ai besoin de démarrer cette méthode toutes les heures en utilisant Windows Service (c'est obligatoire). J'ai donc écrit mon service par quelques exemples (juste un Invoke pour le démarrage):Comment démarrer la méthode sur le minuteur à partir du service Windows?

partial class ServiceWSDRun : ServiceBase 
{ 
    protected override void OnStart(string[] args) 
    { 
     Thread t = new Thread(WebServiceDownload.MainProgram.Execute); 
     t.Start(); 
    } 
} 

Maintenant, quand je l'installe, il lance ma méthode dans un nouveau fil, mais ce fil semble mettre fin à la OnStart() - Il enregistre en fait quelques informations depuis le début de la méthode. Pourquoi ça s'arrête et que dois-je faire?

Et je pense à la fin je devrais avoir quelque chose comme ceci:

partial class ServiceWSDRun : ServiceBase 
{ 
    System.Timers.Timer timer = null; 

    protected override void OnStart(string[] args) 
    { 
     Thread t = new Thread(WebServiceDownload.MainProgram.Execute); 
     t.Start(); 

     timer = new System.Timers.Timer(); 
     timer.Interval = 60 * 60 * 1000; // 1 hour 
     timer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimer); 
     timer.Enabled = true; 
    } 

    public void OnTimer(object sender, System.Timers.ElapsedEventArgs args) 
    { 
     WebServiceDownload.MainProgram.Execute(); 
    } 

    protected override void OnStop() 
    { 
     timer.Enabled = false; 
    } 
} 

Comment puis-je faire fonctionner? Et gardez à l'esprit que cette méthode prend ~ 10 minutes à exécuter.

Répondre