我用 C# 编写了一个 Windows 服务来记录所有用户登录和注销,并将它们保存在服务器上的表中。
我使用了一个while
带条件的循环,并在这个循环中每分钟检查一次系统的当前用户,所以当我打开我的系统时true
,我的服务会进入“正在启动”状态。
到这里一切都很好,但问题是OnStop()
当我关闭系统时该方法没有被调用。我知道问题在于服务启动时的状态,因为当我while
在服务方法中注释循环时OnStart()
,该OnStop()
方法将正确执行。
我用 C# 编写了一个 Windows 服务来记录所有用户登录和注销,并将它们保存在服务器上的表中。
我使用了一个while
带条件的循环,并在这个循环中每分钟检查一次系统的当前用户,所以当我打开我的系统时true
,我的服务会进入“正在启动”状态。
到这里一切都很好,但问题是OnStop()
当我关闭系统时该方法没有被调用。我知道问题在于服务启动时的状态,因为当我while
在服务方法中注释循环时OnStart()
,该OnStop()
方法将正确执行。
OnStart() 必须返回操作系统,下面是 MSDN 文档,
服务应用程序旨在长时间运行。因此,它通常会轮询或监视系统中的某些内容。在 OnStart 方法中设置监视。但是, OnStart 实际上并不进行监控。 一旦服务的操作开始,OnStart 方法必须返回到操作系统。它不能永远循环或阻塞。
要设置简单的轮询机制,您可以使用 System.Timers.Timer 组件。在 OnStart 方法中,您将在组件上设置参数,然后将 Timer.Enabled 属性设置为 true。然后计时器会定期在您的代码中引发事件,此时您的服务可以进行监控。
http://msdn.microsoft.com/en-us/library/aa984464%28v=vs.71%29.aspx