我用 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