为什么在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方法,您将看到它根本不执行任何操作。