如何在.NET中编写调度程序应用程序?
时间:2020-03-06 14:55:46 来源:igfitidea点击:
如何在C.NET中编写调度程序应用程序?
解决方案
这完全取决于要求:
- 如果我们有权访问数据库,则可以将表用作队列,并使用服务定期轮询队列。
- 如果应用程序是仅客户端(CLI),则可以使用系统调度程序("调度的任务")。
- 最后,如果应用程序仅在数据库中(例如,使用SQL Server 2005中的CLR),则可以创建一个SQL Server作业来调度它。
我们还可以使用计时器控件使我们希望每X个滴答声发生的事件触发该程序,甚至只是触发一次。最好的解决方案实际上取决于我们要完成的工作。
假设我们正在编写某个系统,该系统需要在特定的时钟时间执行某项操作,那么以下内容将涵盖引发事件的基本任务。
为每个要安排的事件创建一个System.Timer(包装在包含该事件参数的对象中)。通过计算毫秒数来设置计时器,直到事件发生为止。例如:
// Set event to occur on October 1st, 2008 at 12:30pm. DateTime eventStarts = new DateTime(2008,10,1,12,30,00); Timer timer = new Timer((eventStarts - DateTime.Now).TotalMilliseconds);
由于我们没有详细介绍,其余的一切都取决于我们自己;处理timer.Elapsed事件以执行所需的操作,然后将应用程序编写为Windows Service或者独立运行。
我们也可以尝试Quartz.Net。
编写Windows服务,在MSDN上有很好的帮助主题,有关我们需要做些什么才能使其可安装等。
接下来,为项目添加一个计时器。不是Winforms计时器,它们在Windows Services中不起作用。当事件不触发时,我们会注意到这一点。找出所需的计时器分辨率是什么,换句话说,如果我们计划在午夜开始计时,可以在午夜和12:15 AM之间开始计时好吗?在生产环境中,我们可以将计时器设置为每X分钟触发一次,而X就是我们可以承受的价格。
最后,当我执行此操作时,我使用Switch语句和一个枚举来创建状态机,该状态机的状态为"正在启动","致命错误","经过计时器/扫描要执行的工作"和"正在工作"。 (我将上面的X除以2,因为实际上需要两个X来完成工作。)
那可能不是最好的方法,但是我已经以这种方式做了几次,并且对我有用。
我们可以尝试使用Windows Task Scheduler API