如何在.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