最大定时器间隔

Wil*_*son 14 .net c#

计时器的最大间隔为2,147,483,647.这是大约25天.但根据我的要求,我需要计时器等待30天.我该如何解决?请帮忙.

Mus*_*sis 23

使用一个System.Threading.Timer.有一些构造函数可以使用a long,a uint或a TimeSpan代替intfor dueTime.任何这些都可以让你设置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();
}
Run Code Online (Sandbox Code Playgroud)

  • 30天,是的.但最大值约为49天,因为即使您使用int64或TimeSpan版本,它也不接受超过2*32-2毫秒的值. (8认同)
  • 那就对了.您会收到"ArgumentOutOfRangeException",文本"超时间隔必须小于2 ^ 32-2". (7认同)
  • @Henk:问题没有说*为什么*计时器的周期需要30天.据我们所知,这个计时器可能会用来向某人发送一封电子邮件,上面写着"嘿,这台服务器连续运行了30天". (3认同)

Bob*_*man 14

int days = 30;
Run Code Online (Sandbox Code Playgroud)

创建一个时间段的计时器.

递减days每次定时器触发.

  • System.Threading.Timer限制为约49天(2*32毫秒),即使使用int64和TimeSpan版本也是如此.因此,对于很长时间的通用计时器,这样的事情是一种有效的方法. (6认同)
  • 我同意.计时器并不是真正意图应对延长至30天的时间段,尽管我的计时器每天运行不止一次. (2认同)

kem*_*002 10

您可以随时让计时器等待一段时间,例如一天,每次计时器触发增加一个计数器并检查计数器的当前值.如果值为30,则执行应该每30天运行一次的代码.

更好的想法是将值设置在外部文件中的某个位置,以便在程序意外退出时,您可以从中断的位置继续.理想情况下,您可能希望将下一个运行日期放在文件中,这样如果程序关闭多天,您可以恢复并在正确的日期启动它,而不必担心上次运行的时间.所以像

NextRunDate = 10/10/2009 4:40 PM

当程序运行时,它将日期提前30天.