C# - System.Timers.Timer 的替代方案,在特定时间调用函数

标签 c# timer scheduled-tasks

我想在特定时间调用我的 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/

相关文章:

android - 如何在android中设置超时

Windows 任务计划程序中带有 $_GET 变量的 PHP 脚本

java - Spring 内置的调度器是持久的吗?

excel - 使用 OnTime 宏停止潜艇的按钮不会停止

c# - MVC3 不接受 cookie

c# - 将 LINQ-to-SQL 谓词组合成单个谓词

c# - 是否有一种正确的方法来菊花链式连接类并以正确的方式调用它?

c - C中最好的计时方法?

c# - C# 中有没有一种方法可以触发 onclick() 事件,并且仍然能够在按住鼠标单击的同时检测到 onDrag() 事件

ios - 在-[SKScene更新:] account for "paused" status中进行时间间隔计算