C# 计划在特定时间运行方法。

C# 计划在特定时间运行方法。,c#,multithreading,datetime,timer,C#,Multithreading,Datetime,Timer,这是一个相当简单的问题,但每次我试图找到答案时,它总是显示有关Windows计划任务的内容,而事实并非如此 假设我的程序基本上是这样的: void StartDoingThings() { //At Specific System.DateTime DoSomething() //At another specific System.Datetime DoSomethingElse() } 我应该放什么来代替这些注释,以使这些方法在不同的日期时间运行 我可以使用Thr

这是一个相当简单的问题,但每次我试图找到答案时,它总是显示有关Windows计划任务的内容,而事实并非如此

假设我的程序基本上是这样的:

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

   //At another specific System.Datetime
   DoSomethingElse()
}
我应该放什么来代替这些注释,以使这些方法在不同的日期时间运行

我可以使用Thread.Sleep()甚至System.Threading.Timers,并根据(DateTimeOfEvent-DateTime.Now)计算时间间隔,但是否有简单的话要说(假设程序仍在运行):2012年11月30日上午9:30,如果您想“安排”,请执行DoAnotherThing()方法?

一种在预定时间做某事的方法,有很多种方法。我不会使用
Thread.Sleep()
,因为这样会使线程无所事事,这是一种资源浪费

一种常见的做法是使用轮询方法,按照定期的时间表(比如说每分钟一次)醒来并查看要执行的任务的共享列表<代码>系统。计时器可用于轮询方法:

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

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

有一个名为quartznet的框架,请查看它。您之所以一直看到计划任务,是因为这正是它的设计目的。按计划运行任务。每个任务都可以是它自己的操作,并相应地安排每个任务,让调度程序管理何时执行。我的理解是(这可能是错误的),windows任务调度是“在X时间,运行此程序”,然后可能使用该程序执行任务。我不是在运行另一个程序,我只是希望当前程序中的某些内容能够等待到某个特定的时间。如果我不正确,一定要帮助我理解,但是考虑到我的理解,Windows任务计划程序无法帮助我在特定时间运行已在运行的程序的特定部分。是否有原因不希望将这些部分拆分为可以在计划任务中运行的组件?此程序将基本上控制设备,并读取各种读数。这些控制和读数将在不同的时间间隔进行,在一定时间后开始。这似乎是适当的,该计划是一个凝聚力的单位来做到这一点。不同传感器的读取将在它们自己的类中进行,但我认为让一个程序处理其所有功能会更干净,而不是像“command_relay.exe”和“read_analog1.exe”等单独的组件。因此,没有内置的东西可以只提供一个dateTime对象?在某个特定的日期做某件事似乎是一件很平常的事情。我的程序中的一些任务之间可能会有延迟,延迟时间可以长达几秒钟,也可以长达几小时,显然,让它每秒钟检查一次可能会消耗比必要的更多的资源。我认为它没有内置的原因是系统时间可能会发生变化,从而导致错误的假设(从不“启动”的计划)这是有道理的,但我想我只是假设在执行定时任务时更改系统时间是有风险的。如果只是时间上的同步更改,那么我认为他们应该使用If(time>set_time)来运行它,而不是等待确切的时间(在时间同步过程中可能会跳过)。