我正在创建windows服务,无论我正在读什么文章,他们都在使用System.Timers.Timer
,但没有提到他们使用它的原因。
是否强制使用Timer
?
以下URL使用带有windows服务的Timer
https://www.c-sharpcorner.com/UploadFile/8a67c0/create-and-install-windows-service-step-by-step-in-C-Sharp/
https://www.c-sharpcorner.com/article/create-windows-services-in-c-sharp/
https://dzone.com/articles/create-windows-services-in-c
https://www.aspsnippets.com/Articles/Tutorial-to-create-a-simple-Windows-Service-with-sample-example-in-C-and-VBNet.aspx
难道不能用的这些方法编写代码吗
protected override void OnStart(string[] args)
{
base.OnStart(args);
GetFailedProductDetails();
}
protected override void OnStop()
{
base.OnStop();
}
编辑:
每30分钟执行一次服务的逻辑
<appSettings>
<add key ="Mode" value ="Interval"/>
<add key ="IntervalMinutes" value ="30"/>
<add key="ClientSettingsProvider.ServiceUri" value="" />
</appSettings>
我的目标:
我想每30分钟运行一次这个服务来执行GetFailedProductDetails()
方法。为此,我在App.config
文件中编写了代码。
服务不会重复。它只是启动一次,然后只要不停止就运行。若它需要重复执行任务,那个么您需要注意在代码中重复自己。
当然,可以设置一个带有无休止for
-循环和Thread.Sleep()
的丑陋系统,但问题是,当启动服务时,Windows希望OnStart
完成,因此可以得出结论,该服务是启动的,而不是仍在启动备使服务操作运行的一切,但不应该自己执行这些操作。
因此,使用计时器的原因是为了使OnStart
功能能够正确完成,然后,定期地,计时器可以启动服务操作,在您的情况下是GetFailedProductDetails()
功能。
至于这段配置,正如我在评论中所说,一点xml不是代码。您从中复制的指南明确编写了读取、解释和应用这些设置的程序,以设置Timer对象,使其在配置的时间间隔内重复。复制xml而不复制附带的代码对您没有任何帮助。
当然,可以使用配置文件来设置间隔设置,但您还必须实际编写代码来读取它们。不过,重复服务的概念不需要这样的设置。你可以用半小时的硬编码间隔来完美地编程服务,然后就这样吧。