在不使用计时器控件的情况下创建 windows 服务
Creating windows service without using timer control
我正在创建 windows 服务,无论我浏览的文章是什么,他们都在使用 System.Timers.Timer
,但没有提及他们使用它的原因。
是否必须使用 Timer
?
以下网址使用 Timer
和 windows 服务
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
文件中编写了代码。
服务不重复。它只是启动一次,然后 运行s 只要它没有停止。如果它需要做重复的任务,你需要在你的代码中处理重复的事情。
当然,您 可以 设置一个丑陋的系统,其中有一个无休止的 for
循环和一个 Thread.Sleep()
,但问题是,当启动一个服务,Windows 期望 OnStart
到 finish,所以它可以断定服务是 started,而不是比 仍在启动 。 OnStart
函数应该 准备 一切以进行服务操作 运行,但它不应该自己执行这些操作。
因此,使用计时器的原因是 OnStart
函数可以正确完成,然后定期执行服务操作,在您的情况下是 GetFailedProductDetails()
函数,可以通过定时器启动。
至于那段配置,正如我在评论中所说,xml 的一部分不是代码。您从中复制的指南明确编写了程序来读取、解释和应用这些设置,以设置一个 Timer 对象以使其在配置的时间间隔内重复。只复制 xml 而不复制随附的代码对您没有任何帮助。
当然,您可以使用配置文件来设置间隔设置,但是您还必须实际编写代码才能读取它们。不过,重复服务的概念 不需要 这样的设置。您可以用硬编码的半小时间隔对服务进行完美编程,然后就这样。
我正在创建 windows 服务,无论我浏览的文章是什么,他们都在使用 System.Timers.Timer
,但没有提及他们使用它的原因。
是否必须使用 Timer
?
以下网址使用 Timer
和 windows 服务
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
文件中编写了代码。
服务不重复。它只是启动一次,然后 运行s 只要它没有停止。如果它需要做重复的任务,你需要在你的代码中处理重复的事情。
当然,您 可以 设置一个丑陋的系统,其中有一个无休止的 for
循环和一个 Thread.Sleep()
,但问题是,当启动一个服务,Windows 期望 OnStart
到 finish,所以它可以断定服务是 started,而不是比 仍在启动 。 OnStart
函数应该 准备 一切以进行服务操作 运行,但它不应该自己执行这些操作。
因此,使用计时器的原因是 OnStart
函数可以正确完成,然后定期执行服务操作,在您的情况下是 GetFailedProductDetails()
函数,可以通过定时器启动。
至于那段配置,正如我在评论中所说,xml 的一部分不是代码。您从中复制的指南明确编写了程序来读取、解释和应用这些设置,以设置一个 Timer 对象以使其在配置的时间间隔内重复。只复制 xml 而不复制随附的代码对您没有任何帮助。
当然,您可以使用配置文件来设置间隔设置,但是您还必须实际编写代码才能读取它们。不过,重复服务的概念 不需要 这样的设置。您可以用硬编码的半小时间隔对服务进行完美编程,然后就这样。