我想在特定时间调用我的 C# 应用程序中的特定函数。 起初我想到了使用 Timer
(System.Time.Timer )
,但很快就无法使用了。为什么?
简单。 Timer 类需要以毫秒为单位的 Interval
,但考虑到我可能希望函数被执行,假设在一周内执行,这意味着:
- 7 天 = 168 小时;
- 168 小时 = 10,080 分钟;
- 10,080 分钟 = 604,800 秒;
- 604,800 秒 = 604,800,000 毫秒;
- 所以间隔为 604,800,000;
现在让我们记住 Interval
接受的数据类型是 int
,我们知道 int
范围从 -2,147,483,648 到 2,147,483,647。
这使得 Timer
无用,不是在这种情况下,而是在超过 25 天的情况下,一旦我们不能将 Interval
设置为大于 2,147,483,647毫秒。
所以我需要一个可以指定何时调用函数的解决方案。 像这样:
solution.ExecuteAt = "30-04-2010 15:10:00";
solution.Function = "functionName";
solution.Start();
因此,当系统时间到达“30-04-2010 15:10:00”时,该函数将在应用程序中执行。
如何解决这个问题?
附加信息:这些函数有什么作用?
- 获取气候信息并基于该信息:
- 启动/关闭其他应用程序(大多数基于控制台);
- 向这些控制台应用程序发送自定义命令;
- 关闭、重启、 sleep 、休眠计算机;
- 如果可能,安排 BIOS 启动计算机;
编辑:
似乎 Interval
接受的数据类型是 double
,但是如果您将一个比 int
更大的值设置为 Interval
,并调用 Start()
它会抛出异常 [0, Int32.MaxValue]
。
编辑 2:
Jørn Schou-Rode 建议使用 Ncron处理调度任务,乍一看这似乎是一个很好的解决方案,但我想听听一些使用过它的人。
最佳答案
您的“Start()”方法应该生成一个线程,该线程在定义的时间间隔内醒来,检查时间,如果您没有达到所需的时间,则返回休眠。
关于C# - System.Timers.Timer 的替代方案,在特定时间调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2699556/