C#service - OnStart()v构造函数

Ron*_*nie 16 .net c# service

我试图理解派生类OnStart()和构造函数之间的区别ServiceBase.通过阅读它似乎是第一次启动服务(打开你的机器后),调用构造函数.此后,您可以根据需要多次停止和启动服务,但永远不会再次调用构造函数,OnStart()每次只调用该方法.谁能确认一下?

谢谢

oxi*_*min 16

不要使用构造函数来执行应该处理的处理OnStart.使用OnStart来处理你的服务的所有初始化.构造函数在应用程序的可执行文件运行时调用,而不是在服务运行时调用.可执行文件之前运行OnStart.例如,当您继续时,不会再次调用构造函数,因为SCM已将对象保存在内存中.如果OnStop释放在构造函数而不是in中分配的OnStart资源,则第二次调用服务时将不会再次创建所需的资源. MSDN

  • 所以,如果我有一个服务并且需要,例如,初始化一个事件处理程序,我想在onStart中做到这一点?或者否,因为它会在处理程序上初始化多个实例? (2认同)

Con*_*rix 5

一个细微的变化是,它确实取决于它是否包含一项服务或多项服务。这是文档中的行

如果可执行文件包含单个服务,则当从 SCM 中选择 Start 时,系统将调用该服务的构造函数;如果调用 Stop,则系统会运行析构函数。

如果可执行文件包含多个服务,则对一项服务调用 Start 会导致为可执行文件中的所有服务调用构造函数,但仅启动指定的服务。当所有服务停止时,服务的析构函数一起运行,而不是在每个服务停止时单独运行。

但 oxilumin 的答案可能就是您所追求的。