2013-07-11 46 views
1

看看我的代码:呼叫功能运行在每天的指定时间

Timer myTimer = new Timer { Interval = 1000 }; 
public void button_Click(object sender, EventArgs e) 
{ 
    myTimer.Tick += new EventHandler(OnTick); 
    myTimer.Start(); 
} 
public void OnTick(object sender, EventArgs ea) 
{ 
    myTimer.Stop(); 
    Execute(); 
} 

我想要的功能Execute();运行在每天指定时间,例如:1h:5min, 1h:25min, 2h10min...。我使用Timer,但我只能使该函数每Interval时间运行。我如何为Timer指定一个绝对时间?

+0

假设您的应用程序将一直运行,您可以编写某种'AlarmClock'类,它维护一个代理列表以及调用它们的时间。在内部,一个计时器会定期启动,检查是否是时候打电话给任何代表了。 –

+1

这可能对您有所帮助http://stackoverflow.com/questions/3243348/how-to-call-a-method-daily-at-specific-time-in-c –

+2

我建议使用Windows计划任务。你还有什么方法可以确保你的应用程序在那个时候运行*? –

回答

0

不能为任何内置的定时器类的指定一个绝对时间。您必须手动计算间隔。

其他的解决方案,可以对您合适的:

  • 使用调度像Quartz
  • 使用Windows计划任务
1

你可以计算的毫秒数电流之间流逝时间和应用程序启动时应运行Timer的时间。设置定时器Interval的毫秒数。

实施例:

TimeSpan ts = <datetime when timer should fire> - DateTime.Now; 

myTimer.Tick += new EventHandler(OnTick); 
myTimer.Interval = ts.TotalMilliseconds; 
myTimer.Start(); 

当定时器已触发,设置的时间间隔再次使用上面的行,以确保它在指定时间再次闪光第二天。

这当然假定您的应用程序确实在您想定时启动的时间运行。