不使用计时器控件创建Windows服务

问题描述 投票:0回答:1

我正在创建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文件中编写了代码。

c# .net windows-services
1个回答
0
投票

服务不会重复。它只是开始一次。您需要在代码中照顾自己的重复。

当然,您可以设置了一个丑陋的系统,其中包含无穷无尽的for循环和Thread.Sleep(),但是存在的问题是,在启动服务时Windows期望OnStart达到完成 ,因此可以得出结论,该服务是started,而不是仍然启动OnStart函数应该准备使服务操作运行的所有内容,但它本身不应执行这些操作。

因此,使用计时器的原因是OnStart功能可以正确完成,然后在此之后,可以通过计时器定期启动服务操作(在您的情况下为GetFailedProductDetails()功能)。


至于我所说的那部分配置,一点点xml都不是代码。该指南明确具有编程功能,可以读取,解释和应用这些设置,以设置Timer对象以使其在配置的间隔内重复。复制该xml而不复制随附的代码将无济于事。

可以使用配置来设置时间间隔,但是,您必须实际编写代码才能读取它们。但是,重复服务的概念不需要这样的设置。您可以以硬编码的半小时间隔对服务进行完美的编程,然后将其保留。

© www.soinside.com 2019 - 2024. All rights reserved.