VB.NET Windows服务的句柄停止

VB.NET Windows服务的句柄停止,vb.net,windows-services,Vb.net,Windows Services,我在VB.NET(VS2010)中创建了一个Windows服务,它每分钟执行一个特定的任务。当用户手动停止服务或系统重新启动时,我可以做些什么来确保在服务实际终止之前任务已正确完成?您应该覆盖 在这里,您应该完成任务并释放所有需要释放的资源 重新启动服务时,不会再次调用该服务的构造函数。因此,您不应该使用构造函数来执行启动处理,而应该使用OnStart()方法来处理服务的所有初始化,并使用OnStop()来释放任何资源 根据您的需要,停止计时器可能就足够了,这样就可以在OnStart中重新启动计

我在VB.NET(VS2010)中创建了一个Windows服务,它每分钟执行一个特定的任务。当用户手动停止服务或系统重新启动时,我可以做些什么来确保在服务实际终止之前任务已正确完成?

您应该覆盖

在这里,您应该完成任务并释放所有需要释放的资源

重新启动服务时,不会再次调用该服务的构造函数。因此,您不应该使用构造函数来执行启动处理,而应该使用
OnStart()
方法来处理服务的所有初始化,并使用
OnStop()
来释放任何资源

根据您的需要,停止计时器可能就足够了,这样就可以在
OnStart
中重新启动计时器:

Me.ServiceTimer.Change(Timeout.Infinite, Timeout.Infinite)
如果您的任务是从它自己的线程开始的,那么您可以确保它将正确完成

当它在主线程中运行时

。。。当Windows服务控制管理器(SCM)调用
OnStart()
OnStop()
OnPause()
,或
OnContinue()
方法,您可以 只有约60秒的时间才能返回。如果你不在规定时间内返回 这一次,SCM会将该服务标记为无响应。 一段时间后,它可能会立即终止正在运行的进程。 如果您需要更多的时间来处理这些方法中的事情,您可以 调用RequestAdditionalTime()方法并告诉SCM 我们的谈话比预期的要长一点。(请参阅中的OnStop()方法。) 上面的例子。)


阅读更多信息:

我有一个名为bRunIsBusy的私有变量,它指示当前是否正在处理任务。将以下代码添加到OnStop方法是否可行?当系统忙时。线程。线程。睡眠(1000)结束While@George:我建议在单独的线程中运行该任务。这将确保它得到正确的完成。否则,SCM可能会在一段时间后终止进程,因为它认为它没有响应。请参阅上面的链接。我不确定你的大锤方法是否有效,至少我会打电话给你。
Me.ServiceTimer.Change(Timeout.Infinite, Timeout.Infinite)