最大定时器间隔
计时器的最大间隔为2,147,483,647。 这是大约25天。 但根据我的要求,我需要计时器等待30天。 我该如何解决? 请帮忙。
为此使用System.Threading.Timer
。 对于dueTime
,有一些构造函数需要long
,a uint
或TimeSpan
而不是int
。 任何这些都可以让你设置30天的时间。
更新 :这是最简单的方法:
System.Threading.Timer _timer; public void Start30DayTimer() { TimeSpan span = new TimeSpan(30, 0, 0, 0); TimeSpan disablePeriodic = new TimeSpan(0, 0, 0, 0, -1); _timer = new System.Threading.Timer(timer_TimerCallback, null, span, disablePeriodic); } public void timer_TimerCallback(object state) { // do whatever needs to be done after 30 days _timer.Dispose(); }
int days = 30;
创建一天的计时器。
每次计时器触发时减少days
。
您可以随时让计时器等待一段时间,例如一天,每次计时器触发增加一个计数器并检查计数器的当前值。 如果值为30,则执行应该每30天运行一次的代码。
更好的想法是将值设置在外部文件中的某个位置,以便在程序意外退出时,您可以从中断的位置继续。 理想情况下,您可能希望将下一个运行日期放在文件中,这样如果程序关闭多天,您可以恢复并在正确的日期启动它,而不必担心上次运行的时间。 所以像
NextRunDate = 10/10/2009 4:40 PM
当程序运行时,它将日期提前30天。
这是一个计时器,告诉您应用程序更适合作为计划任务实现。
我强烈建议使用Windows 计划任务function,特别是如果打算在每个月的同一天运行某些function,因为月份在28到31天之间变化。
当你想要执行任何事情时,将日期时间变量设置为日期时间…然后只需每分钟检查一次计时器(或者无论你需要的准确度是多少),看看该日期时间是否已经过去……
要使用计时器,您还需要一个应用程序和一台不间断运行30天以上的PC。 并非不可能,但风险很大。
听起来你想要预定执行某些事情。 计算目标日期/时间并将其保留为XML或.config文件。 当应用程序重新启动时,它可以重新计算TimeSpan以触发事件。
Quartz.NET库是另一个按计划运行代码的选项。
计时器构造函数将采用TimeSpan,这是int64 ticks肯定超过25天?
您是否还认为系统可能不会熬夜30天?
只是查了一下,这是10,675,199天。