c# - 定期运行的 Windows 服务

标签 c# windows-services multithreading backgroundworker

我正在编写一个 Windows 服务,一旦启动就会每 X 小时运行一次。它完成的过程相当密集,所以我想使用后台 worker 。我正在使用一个设置文件来存储运行之间的时间和上次服务运行的时间。

我不太确定最好的方法 - 也就是说,我希望服务使用尽可能少的资源闲置,并且当它运行时,它需要在后台工作程序中运行,报告它做了什么, 然后回到空闲模式。

我考虑过使用 2 个后台工作人员。第一个工作人员将是运行如下服务的私有(private)局部变量:

while (true)
{
      //create new background worker and run

      Thread.Sleep(Settings.Default.SleepTimeHours * 3600000);
}

有一个子 worker ,它在循环的每次迭代中创建,并在完成时销毁。为了支持取消,我认为我必须在服务中提供第二个工作人员的本地实例,但如果进程当前未运行,它将为 null。当辅助 worker 完成时,它会发出我的报告,在设置文件中设置最后运行时间,然后处理 worker 并将引用设置为 null。

我想知道是否有更好的方法或最佳实践。

谢谢

最佳答案

我通常使用定时器,然后在进程开始运行时停止它。

这是一篇解释 how to do it 的文章.

关于c# - 定期运行的 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1498498/

相关文章:

c# - Windows 服务与桌面应用程序之间的通信

windows - 设置在 Visual Studio 的 "Title"对话框中显示的 "Attach to Process"值?

c++ - 工作前的 OpenMP 线程初始化和反初始化

python - 我的脚本需要同时运行两个循环来读取来自两个不同来源的 IO 数据。我的线程正确吗?

c# - WSDoAllReceiver : Incoming message does not contain required Security header

c# - 数组排序效率...初学者需要指点

c# - 在 LINQ 查询 'if' 语句中实现条件 'where' 语句

c# - 如何在 Microsoft Azure 中的同一解决方案中引用项目

c# - 从 Windows 服务调用异步方法

ios - 在调用 layoutSubviews 之前将在 UIView 上运行的 NSOperation