为什么在Windows服务停止时调用base.OnStop()?

我正在创建一个C#.Net Windows服务,我想知道你是否总是要调用base.OnStop(); 在服务的OnStop()方法中为什么?

 protected override void OnStop() { threadRunning = false; this.ExitCode = 0; base.OnStop(); } 

从ServiceBase.OnStop上的文档:

期望在派生类中重写OnStop。 要使服务有用,OnStart和OnStop都应该在您的服务类中实现。

所以它真的被用作服务的通知,它正在停止。

只需浏览一下ServiceBase.cs的.NET源代码,就会发现该方法无效:

 protected virtual void OnStop() { } 

所以,你需要打电话吗? 不,但这样做还是很好的forms。 基础实现有一天可能会改变。

你不必。 它只是意味着如果你在ServiceBase和实际服务之间插入一个额外的基类,你将调用它的OnStop方法,如果它被覆盖。 我不相信ServiceBase.OnStop本身会执行任何操作。

通常,在覆盖IMO时调用基本方法是个好主意,除非您特别想要阻止“正常”行为发生……但在这种情况下,省略该调用不会产生任何不良影响。

你不需要。

OnStop是ServiceBase中定义的虚方法,允许您覆盖服务停止处理。 在(某种程度上)一般情况下,当您覆盖虚方法时,也会调用基本虚方法。 你没有打电话的唯一一次是你想要阻止正常事情的发生。

对于Servicebase,OnStop不执行任何操作,因此您无需调用它。

你实际上不必打电话。 如果您使用Reflector查看ServiceBase类中的OnStop方法,您将看到它根本不执行任何操作。