2016-05-04 5 views
1

Ich mache einen Service in C#.Laufschleife außerhalb onStart

Ich habe die Funktionen:

onStart(); 
copy(); 
onStop(); 

Ich war copy() in der onStart() Funktion ausgeführt wird. Aber es machte den Service-Status für immer auf beginnend, da die copy() Funktion eine Schleife ist, die unendlich läuft (mit einer Thread.Sleep() innerhalb), so dass der Service nicht zu stoppen, es sei denn, ich beende den Prozess im Task-Manager.

Also Frage ist:

Wie kann ich copy() am Ende onStart() zu laufen bekommen und bekommen onStart() nicht für den Abschluss der copy() zu warten?

Antwort

2

Sie können einen neuen Thread von OnStart starten, damit Ihr Dienst den Service Controller zurückgibt.

Sie können auch den Timer verwenden, der in OnStart gestartet wird und Ihren Dienst am Laufen hält.

private System.Timers.Timer timer; 

protected override void OnStart(string[] args) 
{ 
    this.timer = new System.Timers.Timer(3000); // 30000 milliseconds = 30 seconds 
    this.timer.AutoReset = true; 
    this.timer.Elapsed += new System.Timers.ElapsedEventHandler(this.timer_Elapsed); 
    this.timer.Start(); 
} 

protected override void OnStop() 
{ 
     this.timer.Stop(); 
     this.timer = null; 
} 

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
     //Your code goes here 
} 
+0

Was macht der 'base.OnStart (args);'? – Phiter

+0

Dadurch wird das Argument an die Basisklasse übergeben. – Adil

+0

Ich erhalte ** Methodenname erwartet ** auf dem 'ThreadStart()' – Phiter

0

Sie können eine neue Thread verwenden oder eine Timer mit dem Code einer Iteration im Tick Ereignis verwenden.

+0

In Ordnung ... ** aber wie? ** – Phiter

+0

Ich beantwortete Ihre Frage. Deine Frage Es geht nicht darum, wie man einen Thread oder einen Timer benutzt. Und es gibt viele Informationen darüber im Stackoverflow. –

Verwandte Themen