Wie stoppe ich eine Windows-Dienstanwendung von einem Thread?

8

Ich habe einen Windows-Dienst, der einen Thread in der OnStart-Methode startet.

Grundsätzlich möchte ich den Dienst stoppen können, wenn etwas wirklich schief geht (wie eine unbehandelte Ausnahme).

Momentan verwende ich ServiceBase.Stop() , aber das beinhaltet, dass eine ServiceBase -Instanz irgendwo für den Thread sichtbar ist, was wiederum beinhaltet, dass meine Instanz im Hauptprogramm als public static deklariert wird.

Gibt es einen "besseren Weg", den Dienst zu stoppen? Wenn es nicht ... ist es sicher, es so zu machen?

    
Jorge Córdoba 25.02.2009, 17:47
quelle

2 Antworten

10

Der einfachste und meiner Meinung nach sauberste Weg ist die Verwendung einer öffentlichen statischen Eigenschaft der Serviceklasse. Dies funktioniert nur, wenn Sie dieselbe Dienstklasse verwenden, um mehrere Dienste im selben Prozess auszuführen, was sehr selten ist.

%Vor%

Das Einfügen der Dienstinstanz in jede Methode, die sie möglicherweise benötigt, ist eine Alternative, aber sie kann schnell unordentlich werden und hat keine wirklichen Vorteile gegenüber der Verwendung einer statischen Eigenschaft.

    
Stephen Martin 25.02.2009, 18:07
quelle
0

Sehen Sie sich das Beispiel hier zur Verwendung der ServiceController-Klasse an um Dienste zu starten und zu stoppen.

Alternativ können Sie Ihre Dienstinstanz an den Thread übergeben, wenn Sie ihn erstellen (oder ihn als Instanzvariable in der Thread-Klasse usw. festlegen), ohne dass Ihre Serviceklasse statisch sein muss.

Ein kurzes Beispiel für die Vollständigkeit:

%Vor%     
Eric Petroelje 25.02.2009 18:04
quelle