【问题标题】:assign a double value to timer interval为计时器间隔分配一个双精度值
【发布时间】:2017-05-08 03:15:33
【问题描述】:

我正在尝试将大量(毫秒)分配给计时器间隔,但我在“timer.Enabled = true”行上遇到了这个崩溃!

异常说:

在 mscorlib.dll 中发生了“System.ArgumentOutOfRangeException”类型的未处理异常

附加信息:数字必须为非负数且小于或等于 Int32.MaxValue 或 -1。

这是我的代码:

    CurrencyTimer.Interval = 2626086891.0;
    CurrencyTimer.Enabled = true;
    CurrencyTimer.AutoReset = true;
    CurrencyTimer.Elapsed += new System.Timers.ElapsedEventHandler(TimerWorker);
    CurrencyTimer.Start();

此行的异常点:CurrencyTimer.Enabled = true; 谢谢,

【问题讨论】:

标签: c# types timer int double


【解决方案1】:

用途:

Threading.Timer

构造函数有几个重载,其中两个接受 TimeSpan 或 Int64 值。除了数据类型的内在限制之外,文档没有提到对值的限制。

【讨论】:

    【解决方案2】:

    异常(和the documentation)非常清楚,间隔必须在0 和int.MaxValue 之间。所以,不要分配比这个更大的值。

    对于非常长的计时器间隔,您可能必须将间隔分成较短的间隔并自己计算。我也很好奇为什么你认为你需要一个 30 天的计时器间隔......

    【讨论】:

    • 但是区间类型是双倍的!
    • 你应该在windows中使用调度器或者像@Qutaiba这样的调度器
    • 阅读文档有时会有所帮助。 该值必须大于零,且小于等于 Int32.MaxValue
    • @Qutaiba:那又怎样?数组索引也是int,有效值只是整个范围的一个子集。这一点也不稀奇。
    • @Qutaiba 哦,那你看看这个stackoverflow.com/questions/11610611/…
    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多