Warum nennen base.OnStop() wenn der Windows-Dienst gestoppt ist?
Ich bin erstellen einer C#.Net Windows-Dienst und Frage mich, wenn Sie immer anrufen base.OnStop();
in den Dienst OnStop()
Methode und warum?
protected override void OnStop()
{
threadRunning = false;
this.ExitCode = 0;
base.OnStop();
}
- Unabhängig von deiner Frage, aber bemerkenswert: nicht verwenden
thread.Abort();
. - merkte
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Dokumentation auf ServiceBase.OnStop:
Es ist also wirklich als eine Benachrichtigung auf Ihrem Dienst, den es zu stoppen.
Einen Blick auf die .NET-source-code für ServiceBase.cs zeigt die Methode macht nichts:
So, müssen Sie es nennen? Nein. Aber es ist immer noch gut in form, dies zu tun. Die Basis-Implementierung kann sich ändern, irgendwann.
Sie nicht haben, um. Es bedeutet nur, dass, wenn Sie jemals einfügen einer zusätzlichen base Klasse zwischen
ServiceBase
und Ihrem eigentlichen Dienst, Sie rufen dieOnStop
Methode, die, wenn Sie außer Kraft gesetzt. Ich glaube nicht, dassServiceBase.OnStop
selbst führt keinerlei Aktionen aus.In der Regel ist es eine gute Idee, rufen Sie die base-Methode, wenn Sie überschreiben IMO, es sei denn, Sie möchten gezielt verhindern, dass das "normale" Verhalten Auftritt... aber in diesem Fall unterlassen der Aufruf gewonnen ' T haben keine Nebenwirkungen.
Brauchen Sie nicht.
OnStop ist eine virtuelle Methode definiert, die in ServiceBase um Ihnen zu erlauben, eine Außerkraftsetzung, wo Sie behandeln können, stoppen Sie den Dienst. In der (etwas) allgemeiner Fall, wenn Sie zum überschreiben einer virtuellen Methode, rufen Sie die Basis-virtuelle Methode als gut. Die einzige Zeit, die Sie nennen Sie es nicht ist, wenn Sie möchten, stoppen Sie die normale Dinge passiert.
Im Fall von Servicebase, OnStop tut nichts, so dass Sie nicht brauchen, um es aufzurufen.
Eigentlich haben Sie diesen Anruf zu machen. Wenn man sich die OnStop-Methode in der ServiceBase-Klasse mit Reflektor, werden Sie sehen, dass es überhaupt nichts macht.