在c#中定期执行特定代码

时间:2014-06-10 07:17:05

标签: c# wpf scheduled-tasks

我想要一天只执行一次查询,我知道这可以在C#中使用TaskScheduler。但我没有得到任何适合我要求的例子。任何人都可以为此提供示例代码吗?

3 个答案:

答案 0 :(得分:5)

您可以尝试FluentScheduler。该文档包含您需要的示例代码。首先我认为它仅适用于网络,但现在我认为您也可以将它用于桌面应用程序。但不确定,也没有经过测试。

https://fluentscheduler.codeplex.com/documentation

编辑您还可以使用任务计划程序 -

  1. 首先创建一个可以运行并完成所有任务的控制台应用程序。您甚至可以使用它调用其他进程。然后构建可执行文件并将其保存在安全的位置。

  2. 然后转到管理工具> Task Sheduler 点击操作>创建新任务新任务。你会看到这样的屏幕 -

  3. enter image description here

    在那里选择您的可执行文件和其他权限。

    1. 现在按计划运行它,转到下一个标签' 触发器'然后单击底部的添加。你会看到这样的屏幕 -
    2. enter image description here

      现在添加您想要的日程安排。确保使用日志,因为您将无法直接看到输出。您可以使用Windows事件查看器或写入自定义文本文件以方便使用。

        

      任务计划程序是Windows本身的一部分。它没有   依赖于C#或C ++的任何东西。基本上你告诉窗户它   将定期运行特定的程序。这是工作的   执行程序初始化所有环境并执行适当的   码。所以即使你使用任务调度程序,你必须确保   您正在使用它运行的程序,具有所有其他选项和代码   右。

答案 1 :(得分:2)

Timer可能是最适合您的解决方案。

  var timer = new Timer {AutoReset = true, Interval = 30000}; 1s = 1000ms 
  timer.Elapsed += timer_Elapsed;
  timer.Start();

 .......

 public void timer_Elapsed(object source, System.Timers.ElapsedEventArgs e)
 {
      // do stuff here that will execute every 30 seconds
 }

答案 2 :(得分:2)

如果您需要可靠的调度程序,从头开始编写自己的调度程序可能需要比预期更多的工作量。如果机器重新启动怎么办?如果它在执行时间前10秒发生怎么办?任务应该延迟执行还是根本不执行?数据将保留在哪里?你必须考虑所有这些事情。

或者,您可以使用Quartz.NET。它是流行的Java作业调度框架的C#端口。代码库经过了充分测试和强大。看看这里: http://www.quartz-scheduler.net/