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

Xan*_*ham 6 c# datetime multithreading timer

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

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

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

   //At another specific System.Datetime
   DoSomethingElse()
}
Run Code Online (Sandbox Code Playgroud)

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

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

Dav*_*sky 4

如果您想“安排”一个方法在预定时间执行某些操作,有多种方法可以实现。我不会使用,Thread.Sleep()因为这会占用一个线程而不执行任何操作,这是浪费资源。

常见的做法是使用轮询方法,定期唤醒(假设每分钟一次)并检查要执行的共享任务列表。 System.Timer可用于轮询方法:

aTimer = new System.Timers.Timer(10000);
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
Run Code Online (Sandbox Code Playgroud)

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