【问题标题】:Call Function run everyday at specify time [duplicate]调用函数每天在指定时间运行[重复]
【发布时间】:2013-07-09 05:30:26
【问题描述】:

看看我的代码:

Timer myTimer = new Timer { Interval = 1000 };
public void button_Click(object sender, EventArgs e)
{
    myTimer.Tick += new EventHandler(OnTick);
    myTimer.Start();
}
public void OnTick(object sender, EventArgs ea)
{
    myTimer.Stop();
    Execute();
}

我希望函数 Execute(); 每天在指定时间运行,例如:1h:5min, 1h:25min, 2h10min...。我使用Timer,但我只能让该函数每隔Interval 时间运行一次。如何为 Timer 指定绝对时间?

【问题讨论】:

  • 假设您的应用程序将一直运行,您可以编写某种AlarmClock 类,它维护代表列表和调用它们的时间。在内部,一个计时器会定期触发,检查是否是时候调用任何代表了。
  • 这可能对你有帮助stackoverflow.com/questions/3243348/…
  • 我推荐使用 Windows 计划任务。您还打算如何确保您的应用在那时正在运行

标签: c# timer


【解决方案1】:

您可以计算当前时间与应用程序启动时Timer 应该运行的时间之间经过的毫秒数。设置定时器的Interval的毫秒数。

例子:

TimeSpan ts = <datetime when timer should fire> - DateTime.Now;

myTimer.Tick += new EventHandler(OnTick);
myTimer.Interval = ts.TotalMilliseconds;
myTimer.Start();

当计时器触发后,使用上面的代码再次设置时间间隔,以确保它在第二天的指定时间再次触发。

这当然假设您的应用程序确实在您想要定时触发的时间运行。

【讨论】:

    【解决方案2】:

    您可以使用 Quartz.net 调度程序创建调度: http://quartznet.sourceforge.net/

    【讨论】:

      【解决方案3】:

      您不能为任何内置计时器类指定绝对时间。您必须手动计算间隔。

      其他可能适合您的解决方案:

      • 使用像Quartz这样的调度程序
      • 使用 Windows 计划任务

      【讨论】:

        猜你喜欢
        • 2020-01-13
        • 1970-01-01
        • 2019-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-03
        • 2020-08-28
        • 2021-01-04
        相关资源
        最近更新 更多