调度在特定时间运行方法。

时间:2012-11-29 20:08:05

标签: c# multithreading datetime timer

这是一个相当简单的问题,但每次我尝试找到答案时,它都会一直显示有关Windows计划任务的事情,而这不是这个问题。

说我的程序基本上是这样的:

void StartDoingThings()
{
   //At Specific System.DateTime
   DoSomething()

   //At another specific System.Datetime
   DoSomethingElse()
}

我应该使用什么来代替这些注释来使这些方法在不同的日期时间运行。

我可以使用Thread.Sleep()甚至System.Threading.Timers并根据(DateTimeOfEvent - DateTime.Now)计算间隔,但是只是说些什么(假设程序仍在运行):在9 :2012年11月30日上午30:00,执行方法DoAnotherThing()?

1 个答案:

答案 0 :(得分:4)

如果您想“安排”某个方法在预定时间执行某些操作,可以通过多种方式执行此操作。我不会使用Thread.Sleep()因为这会占用一个什么都不做的线程,这会浪费资源。

一种常见的做法是使用一种轮询方法,该方法按照定时计划(比如每分钟一次)唤醒并查看要执行的共享任务列表。 System.Timer可用于轮询方法:

aTimer = new System.Timers.Timer(10000);
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

OnTimedEvent方法可以包含维护要执行的“任务”集合的代码。当任务的时间到来时,下一次运行Timer将导致它执行。