【问题标题】:Calling a method or action during a particular time在特定时间调用方法或操作
【发布时间】:2014-07-09 12:50:01
【问题描述】:

我有一项需要在每天上午 12 点运行一次的操作。我已经通过使用匹配DateTime.Now.Hour == someValue; 的条件检查约束来实现相同的功能,但是,我不希望 while 循环运行 n 次以进行一次操作。我已经让线程进入睡眠状态但我仍然对解决方案不满意。尝试使用计时器也不会奏效。我们是否有任何称为时钟或时间的概念以及在相应时间调用特定操作的事件。请澄清。

【问题讨论】:

  • 定时器也不会工作请解释原因?
  • 如果我在凌晨 12 点设置了一个 24 小时的计时器并运行该计时器,那么一切都会工作,直到服务没有重新启动。如果服务在下午 1 点重新启动,则经过的事件将在第二天下午 1 点发生..
  • 为什么不能使用 windows scheduler 来调用它?
  • 要添加到 raja 给出的答案,您还可以创建一个 Windows 服务并使用 Quartz.Net 来设置时间表

标签: c# thread-sleep system.timers.timer


【解决方案1】:

一些选项:

  1. 简单 EXE 的 Windows NT 计划任务在功能和时间逻辑分离的许多场景中完成这项工作。
  2. 带有计时器的 Windows 服务是另一种选择。不知道为什么计时器不适合你。请注意,您需要为服务提供 2 个输入。RunImmediatelyOnStartup 和 AbsoluteTimeOfNextRun..基于此,您可以避免启动时间不匹配问题。
  3. 带有计时器的普通 EXE 是另一种选择。
  4. 带睡眠的普通 EXE 是另一种选择。

简而言之,计时器有助于避免不断的轮询……而睡眠可让您调节轮询。比可能会影响 CPU 的疯狂 while 循环要好。

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 2013-05-15
    • 2011-06-04
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多