我正在创建Windows服务,无论我正在研究他们使用System.Timers.Timer
的任何文章,都没有提及他们为什么使用它。
是否必须使用Timer
?
这些以下URL在Windows服务中使用Timer
https://www.c-sharpcorner.com/article/create-windows-services-in-c-sharp/
https://dzone.com/articles/create-windows-services-in-c
不能仅通过使用这些方法编写代码来完成
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
达到完成 ,因此可以得出结论,该服务是started,而不是仍然启动。 OnStart
函数应该准备使服务操作运行的所有内容,但它本身不应执行这些操作。
因此,使用计时器的原因是OnStart
功能可以正确完成,然后在此之后,可以通过计时器定期启动服务操作(在您的情况下为GetFailedProductDetails()
功能)。
至于我所说的那部分配置,一点点xml都不是代码。该指南明确具有编程功能,可以读取,解释和应用这些设置,以设置Timer对象以使其在配置的间隔内重复。复制该xml而不复制随附的代码将无济于事。
您可以使用配置来设置时间间隔,但是,您必须实际编写代码才能读取它们。但是,重复服务的概念不需要这样的设置。您可以以硬编码的半小时间隔对服务进行完美的编程,然后将其保留。