在不使用计时器控件的情况下创建 windows 服务

Creating windows service without using timer control

我正在创建 windows 服务,无论我浏览的文章是什么,他们都在使用 System.Timers.Timer,但没有提及他们使用它的原因。

是否必须使用 Timer

以下网址使用 Timer 和 windows 服务

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 文件中编写了代码。

服务不重复。它只是启动一次,然后 运行s 只要它没有停止。如果它需要做重复的任务,你需要在你的代码中处理重复的事情。

当然,您 可以 设置一个丑陋的系统,其中有一个无休止的 for 循环和一个 Thread.Sleep(),但问题是,当启动一个服务,Windows 期望 OnStartfinish,所以它可以断定服务是 started,而不是比 仍在启动 OnStart 函数应该 准备 一切以进行服务操作 运行,但它不应该自己执行这些操作。

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


至于那段配置,正如我在评论中所说,xml 的一部分不是代码。您从中复制的指南明确编写了程序来读取、解释和应用这些设置,以设置一个 Timer 对象以使其在配置的时间间隔内重复。只复制 xml 而不复制随附的代码对您没有任何帮助。

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