【问题标题】:Periodic execution of particular code in c#在 c# 中定期执行特定代码
【发布时间】:2014-07-30 20:46:13
【问题描述】:

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

【问题讨论】:

  • 你试过Timer吗?
  • 你可以在网上实现很多window service的例子,在里面使用timer并在需要的时候执行代码
  • @ActiveHigh 我将它用于桌面应用程序,我也没有使用任何网络服务。我需要它用于本地数据库。
  • 如果它是桌面应用程序,为什么不使用 Timer 或线程?
  • @ricky stackoverflow.com/questions/24079921/… 从这个链接我知道任务调度器是合适的选择。所以如果你有任何代码,请发布它。

标签: c# wpf scheduled-tasks


【解决方案1】:

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

https://fluentscheduler.codeplex.com/documentation

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

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

  2. 然后转到管理工具>任务调度器并通过单击操作>新任务创建一个新任务。你会看到这样的屏幕 -

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

  1. 现在要按计划运行它,请移至下一个标签“触发器”,然后单击底部的添加。你会看到这样的屏幕 -

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

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

【讨论】:

    【解决方案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
     }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 2010-12-01
        • 1970-01-01
        相关资源
        最近更新 更多