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