2013-04-03 24 views
1

我有一个运行每隔五分钟,然后睡觉的过程。我想知道当时间是晚上11:45到午夜的时候,是否有一种优雅的方式来做某些事情(任何事情)。做一些在特定时间在.NET

我的第一反应是得到一个做类似这样的东西...

public bool isItMidNight() { 
     return ((DateTime.UtcNow.Hour > 11:54) && DateTime.UtcNow.Hour < 11.59);    
    } 

如果该值计算结果为真,那么做一些事情。如果没有,继续睡觉并醒来联系 只是psuedo代码BTW。我认为这不会达到产量。但那是我的想法。是否有更多的* 强文 *优雅的解决方案

+3

我觉得这里最好的办法是与计划的任务,有你想要一个控制台应用程序中运行代码。 – JMK

回答

6

不知道它是否符合“优雅”,但Quartz.NET肯定是“企业”。

2

留出时间管理的机制,以最适合它的地方 - 我建议使用Windows Task Scheduler

让它晚上11:45触发您的应用程序,然后你的应用程序可以专注于自己的任务,而不必担心时间和是否该应用程序的另一个实例已经回升并运行与任务等。

+0

这是我考虑过的事情。但我试图将这项任务的运动部分保持在最低限度。而且由于我是新的,这个线程每隔几分钟就会睡觉并醒来,所以我想知道是否有一种方法可以利用它。 – SoftwareSavant

+1

@DmainEvent用互斥锁/信号一起,以确保有且仅有一个过程对于一个给定的一天拉开序幕,你还必须确保你有一个进程在时间做它的事活着。您是否定义了一种机制来确保您的流程每天在11:45和午夜之间运行?它会适当地处理崩溃和机器重启吗?计划任务隐式处理所有这些问题。 – 48klocs

+0

将会有一个过程运行,以确保这件事情开始。该线程每5分钟旋转一次该线程。我再次想到了使用计划任务,但是这个过程已经到位,我想我也可以使用它。 – SoftwareSavant

2

您可以使用Timer类,像这样一个:

new System.Threading.Timer(myScheduledTask, null, new TimeSpan(hh, mm, ss) - DateTime.Now.TimeOfDay, -1); 
+0

现在就是我说的。 – SoftwareSavant

+0

现在我已经查看了一些代码,但我不确定如何解决我的特定问题。我不一定想要倒数。我的线程每5分钟醒来一次。在5分钟的间隔里醒来的那一天,我想要做点什么。上面的代码如何帮助我做到这一点? – SoftwareSavant

+0

好吧,你的意思是你想安排将现有线程唤醒到特定时间吗?其他时间你真的需要这个单独的线程吗?为什么不使用定时器代替线程 - 它可能接受状态对象.. – Lanorkin

相关问题