如何设置定时器在c#中的特定时间执行

我有一个要求,我需要在每天00:01:00 AM执行计时器…但我没有得到如何实现这一点..如果我正在采取系统时间,它可以是不同的格式..这里是我的计时器代码..

static System.Timers.Timer timer; timer = new System.Timers.Timer(); timer.Interval = 1000 * 60 * 60 * 24;//set interval of one day timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); start_timer(); static void timer_Elapsed(object sender, ElapsedEventArgs e) { // Add timer code here } private static void start_timer() { timer.Start(); } 

你应该做的是编写你的程序,做你需要做的任何事情,然后使用你的操作系统的内置任务调度程序来启动它。 那是最可靠的。 例如,Windows的任务计划程序可以在用户登录之前启动您的应用程序,在必要时处理重新启动应用程序,记录错误并发送通知等。

否则,您必须每周7天,每天24小时运行您的应用程序,并定期轮询该时间。

例如,您可以每分钟更改一次间隔:

 timer.Interval = 1000 * 60; 

在您的Elapsed事件中,检查当前时间:

 static void timer_Elapsed(object sender, ElapsedEventArgs e) { if (DateTime.Now.Hour == 1 && DateTime.Now.Minute == 0) { // do whatever } } 

但这真的不可靠。 您的应用可能会崩溃。 处理DateTime可能很棘手。

如果你想在00:01:00准时启动一个计时器做一些处理时间,然后重新启动计时器,你只需要计算Now和下一个00:01:00 am时隙之间的差异,如。

 static Timer timer; static void Main(string[] args) { setup_Timer(); } static void setup_Timer() { DateTime nowTime = DateTime.Now; DateTime oneAmTime = new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, 0, 1, 0, 0); if (nowTime > oneAmTime) oneAmTime = oneAmTime.AddDays(1); double tickTime = (oneAmTime - nowTime).TotalMilliseconds; timer = new Timer(tickTime); timer.Elapsed += timer_Elapsed; timer.Start(); } static void timer_Elapsed(object sender, ElapsedEventArgs e) { timer.Stop(); //process code.. setup_Timer(); } 

你总是可以计算它:

 static void timer_Elapsed(object sender, ElapsedEventArgs e) { // Do stuff start_timer(); } private static void start_timer() { timer.Interval = CalculateInterval(); timer.Start(); } private static double CalculateInterval() { // 1 AM the next day return (DateTime.Now.AddDays(1).Date.AddHours(1) - DateTime.Now).TotalMilliseconds; }