我正在创建一个C#.Net Windows服务,我想知道你是否总是要在服务的base.OnStop();
方法中调用OnStop()
以及为什么?
protected override void OnStop()
{
threadRunning = false;
this.ExitCode = 0;
base.OnStop();
}
答案 0 :(得分:12)
来自ServiceBase.OnStop的文档:
预计OnStop将被覆盖 派生类。为了服务 有用,OnStart和OnStop应该 两者都在您的服务中实施 类。
所以它真的被用作服务的通知,它正在停止。
浏览ServiceBase.cs的.NET源代码可以发现该方法无效:
protected virtual void OnStop()
{
}
那么,你需要打电话吗?不,但这样做还是很好的形式。基础实现有一天可能会改变。
答案 1 :(得分:6)
你不必。它只是意味着如果你在ServiceBase
和实际服务之间插入一个额外的基类,你将调用它的OnStop
方法,如果它被覆盖了。我不相信ServiceBase.OnStop
本身会执行任何操作。
通常在你覆盖IMO时调用基本方法是个好主意,除非你特别想要防止“正常”行为发生......但在这种情况下,省略调用将不会有任何不适的效果。
答案 2 :(得分:6)
你不需要。
OnStop是ServiceBase中定义的虚方法,允许您覆盖服务停止处理。在(有些)一般情况下,当您覆盖虚方法时,也会调用基本虚方法。你没有打电话的唯一一次是当你想要阻止正常事情发生时。
对于Servicebase,OnStop不执行任何操作,因此您无需调用它。
答案 3 :(得分:2)
你实际上不必拨打电话。如果你使用Reflector查看ServiceBase类中的OnStop方法,你会发现它什么都不做。