需要帮助编写定期任务调度程序

时间:2011-01-05 04:35:24

标签: windows service scheduling

我需要编写一个工具,它将在用户可配置的计划上运行重复任务。我将在C#3.5中编写它,它将在XP,Windows 7或Windows Server 2008上运行。这些任务大约需要20分钟才能完成。用户可能希望设置多个配置:例如,每日,每周和每月周期。使用任务计划程序不是一种选择。

用户将通过类似于Outlook的定期约会对话框的界面安排重复。一旦他们设置了计划,他们就会启动它,它应该放在系统托盘中并在指定的时间启动它的任务,然后发送邮件表明它已经完成。

写这篇文章的最佳方法是什么,以免它耗尽资源,锁定主机或以其他方式行为不端?

2 个答案:

答案 0 :(得分:4)

您可以做的最好的事情是通过利用操作系统提供的功能来避免重新发明轮子。请参阅Bart De Smet的文章Calling the Task Scheduler in Windows Vista (and Windows Server 2008) from managed code,了解C#中Windows任务调度程序的非常常用的用法。

如果出于某种原因你必须实现自己的服务(例如,更好地控制依赖关系),我会看一些.NET兼容语言中的开源Cron实现。有一篇文章包含名为Implementing a small Cron service in C#的代码项目的代码,似乎是这样做的。根据他的文章An Event Based Cron (Scheduled) Job In C#,看起来Bob Cravens在这个领域做了一些更彻底的工作,或者至少更彻底地记录了他的工作。我相信如果你环顾四周会有其他人,而基于Cron的东西是一个很好的起点。

答案 1 :(得分:1)

我建议编写一个使用SQlite数据库的Windows服务来获取日程安排 添加一个GUI来编写你需要的任何数据库,但记得使用

System.Timers.Timer 

而不是

System.Windows.Forms.Timer

在Windows服务中