C# Windows服务完成后如何停止?

C# Windows服务完成后如何停止?,c#,windows-services,C#,Windows Services,因此,我有一个每小时启动一次的windows服务。它将查询一些数据库表,并将数据放入其他表中。完成后,我想停止服务,这样,一个小时后,它可以再次启动。我试过: this.Stop(); 及 当我执行第一个操作时,它会运行,但我收到一个警报,提示它意外停止。事件查看器中没有错误。一切进展顺利,只是留下了一个可怕的警报 当我执行第二个操作时,它会暂停,并说它无法启动服务并超时 如果我没有任何停止,只是等待程序,服务将保持在已启动状态 目标 要在没有任何警告的情况下停止服务,请键入警报或消息。如果还

因此,我有一个每小时启动一次的windows服务。它将查询一些数据库表,并将数据放入其他表中。完成后,我想停止服务,这样,一个小时后,它可以再次启动。我试过:

this.Stop();

当我执行第一个操作时,它会运行,但我收到一个警报,提示它意外停止。事件查看器中没有错误。一切进展顺利,只是留下了一个可怕的警报

当我执行第二个操作时,它会暂停,并说它无法启动服务并超时

如果我没有任何停止,只是等待程序,服务将保持在已启动状态

目标


要在没有任何警告的情况下停止服务,请键入警报或消息。如果还调用了OnStop(),那就太好了。

您不必启动和停止服务。将其间隔设置为一小时,并在计时器已过事件中执行进程

定义类级
计时器
对象。在
OnStart
中实例化它并启用它。在
appeased
事件中,执行您的流程,例如:

private System.Timers.Timer serviceTimer;
protected override void OnStart(string[] args)
{
    serviceTimer = new System.Timers.Timer();
    serviceTimer.Interval = 3600000; //one hour
    serviceTimer.Elapsed += serviceTimer_Elapsed;
    serviceTimer.Enabled = true;
}

void serviceTimer_Elapsed(object sender, ElapsedEventArgs e)
{
    serviceTimer.Enabled = false;
    // do your process
    serviceTimer.Enabled = true;
}
您还可以使用
System.Threading.Timer
,其中可以指定计时器立即启动,然后每一小时执行一次,如:

System.Threading.Timer timer = new System.Threading.Timer(
       new TimerCallback(YourMethod), 
       null, 
       0,  //initial start time
       3600000);

这很有道理,谢谢你。我真的很喜欢serviceTimer.Enabled=在流程完成后为false和true。这是一个合理的解决方法(虽然效率很低,因为它会让流程不必要地运行),但它实际上并没有回答问题。我认为就使用windows服务而言,Habib建议的方法是可行的。否则,我可能会使用计划任务。服务应该在执行任何工作之前离开启动状态并进入运行状态。在服务仍处于启动状态时停止服务是错误的。如果在服务进入运行状态后停止服务,则不会将其视为错误,也不会生成警报。如何将其置于运行状态?
System.Threading.Timer timer = new System.Threading.Timer(
       new TimerCallback(YourMethod), 
       null, 
       0,  //initial start time
       3600000);