Pet*_*y B 14 c# windows-services
我正在创建一个C#.Net Windows服务,我想知道你是否总是要调用base.OnStop();服务的OnStop()方法,为什么?
protected override void OnStop()
{
threadRunning = false;
this.ExitCode = 0;
base.OnStop();
}
Run Code Online (Sandbox Code Playgroud)
Pau*_*ams 12
从ServiceBase.OnStop上的文档:
期望在派生类中重写OnStop.要使服务有用,OnStart和OnStop都应该在您的服务类中实现.
所以它真的被用作服务的通知,它正在停止.
只需浏览一下ServiceBase.cs的.NET源代码,就会发现该方法无效:
protected virtual void OnStop()
{
}
Run Code Online (Sandbox Code Playgroud)
所以,你需要打电话吗?不,但这样做还是很好的形式.基础实现有一天可能会改变.
你不必.它只是意味着如果你ServiceBase在实际服务之间插入一个额外的基类,你将调用它的OnStop方法,如果它被覆盖.我不相信ServiceBase.OnStop自己会采取任何行动.
通常,在覆盖IMO时调用基本方法是个好主意,除非您特别想要阻止"正常"行为发生......但在这种情况下,省略该调用不会产生任何不良影响.
你不需要.
OnStop是ServiceBase中定义的虚方法,允许您覆盖服务停止处理.在(有些)一般情况下,当您覆盖虚方法时,也会调用基本虚方法.你唯一不打电话的时候就是想要阻止正常事情的发生.
对于Servicebase,OnStop不执行任何操作,因此您无需调用它.