回调一段时间

时间:2010-12-05 23:21:17

标签: c# callback timer

我想实现一个在精确时间回调方法的方法。我们可以拥有的不仅仅是可以同时调用的方法。

    public void CallmeBack(DateTime time, Action callback)
    {

    }

C#中最好的实现是什么?

我快速而又肮脏的解决方案是创建一个字典Dictionary<DateTime, List<Action>>并每隔一分钟(分钟/秒)制作一个计时器,并检查时间(DateTime.Now)和测试模式下的当前时间。

如果当前机器时间发生变化,解决方案必须为“安全”。所以像这样的简单解决方案无法工作:

        Timer timer = new Timer((param) => {callback.Invoke();}, null,
            (long)(time - DateTime.Now).TotalMilliseconds, Timeout.Infinite);

修改: 简易定时器不工作的典型情况是DST和手动时间/日期调整。 另外,我只想要多次执行回调。

2 个答案:

答案 0 :(得分:2)

您正在寻找的是一个cron库。那里有很多。有些功能很多,而且有点重。这是一篇关于cron作业和我在生产代码中使用的库的博客文章。

http://blog.bobcravens.com/2009/10/an-event-based-cron-scheduled-job-in-c/

希望有助于您入门。

鲍勃

答案 1 :(得分:1)

您可能需要考虑几种选择:

  • 您可以使用任务计划程序,例如:http://taskscheduler.codeplex.com/

  • 你可以坚持使用计时器,并使用SystemEvents.TimeChanged监听时间变化。该事件由用户时间更改触发。我假设您可以在首先设置计时器时处理可预测的时间变化(夏令时等)。我不确定与NTP相关的更改 - 您需要进一步调查。