触发12小时循环

时间:2012-06-27 22:23:14

标签: c# console-application

我不确定如何正确命名这个问题。请自由编辑。

我的服务器上运行了后台控制台应用程序。控制台应用程序不时发送电子邮件并做一些小事(每5分钟一次)。

应用程序不是每隔5分钟通过任务管理器启动一次,它在安装过程中打开一次,并且无限循环并且thread.sleep使其保持运行。因此我无法将任务管理器配置为使用特定参数打开应用程序。

现在我需要添加一个每12小时运行一次的任务,我想使用相同的应用程序。任务包括删除并创建一些文件,但检查自上次创建以来的12小时是否基于每5分钟的文件日期对我来说有点不明智。

是否有一种非常昂贵的方式(没有数据库,没有日志,没有文件创建日期,没有多线程)来使用我拥有的相同应用程序来勾选12小时循环?如果没有,最好的方法是什么?

3 个答案:

答案 0 :(得分:3)

这是Windows任务计划程序的用途。重塑已经存在的东西毫无意义。

http://windows.microsoft.com/en-us/windows7/Schedule-a-task

答案 1 :(得分:1)

这是一种在没有循环的情况下在午夜时间安排的有效方法:

var now=DateTime.UtcNow;
var today=now.Date;
var tomorrow=today.AddDays(1);
var dueTime=tomorrow-now;

System.Threading.Timer timer = null;
timer = new Timer(_ => {
    try
    {
        //do your thing
    }
    finally
    {
        timer.Dispose();
    }
},null,dueTime,TimeSpan.FromMilliseconds(-1d))

答案 2 :(得分:1)

据我所知,你已经有一个等待5分钟然后执行任务A的循环。现在你要添加任务B每12小时运行一次。我要么用Timer对象替换它们,要么在任务A运行时每隔5分钟替换一次,检查任务B运行了多长时间。如果它至少12个小时,那么运行任务B.

if (last12HourRun.Subtract(DateTime.Now).TotalHours > 12)
  // run task B
  last12HourRun = DateTime.Now;