【问题标题】:how to continuously run a c# console application in background如何在后台连续运行 C# 控制台应用程序
【发布时间】:2013-06-30 00:21:36
【问题描述】:

我想知道如何每隔五分钟在后台运行一个 c# 程序。下面的代码不是我想作为后台进程运行的,而是想找出使用​​此代码执行此操作的最佳方法,以便我可以在另一个代码上实现它。所以这个过程应该在五分钟增量后运行。我知道我可以使用线程来做到这一点,但现在真的不知道如何实现这一点。我知道这是How to run a console application on system Startup , without appearing it on display(background process)? 在后台运行的最佳方式,但是我如何让代码以五分钟的增量运行

 class Program
    {
        static void Main(string[] args)
        {
            Console.Write("hellow world");
            Console.ReadLine();
        }
    }

【问题讨论】:

  • 如果应用中没有输出,你应该考虑创建一个服务来代替。
  • 如果应用中没有输出,为什么写Console.Write
  • 或使用 windows schedule 每 5 分钟运行一次
  • 使用 TopShelf 制作 windows 服务,然后在 While(true) 范围内放置 Thread.Sleep(5*60*1000)

标签: c#


【解决方案1】:

此应用应连续运行,每 5 分钟发出一条消息。
这不是你想要的吗?

class Program
{
    static void Main(string[] args)
    {
        while (true) {
            Console.Write("hellow world");
            System.Threading.Thread.Sleep(1000 * 60 * 5); // Sleep for 5 minutes
        }

    }
}

【讨论】:

  • @Cemafor 他在我发表评论后编辑了答案。无论时间间隔如何,他的初始代码都会运行。我已将其删除,因为它不再相关
  • 你为什么需要一段时间
  • while(true) 将导致循环永远运行或直到您终止应用程序..
  • 虽然需要 true 才能让应用程序到达终点。
  • Console.Write 将每 5 分钟运行一次。将该行替换为您希望每 5 分钟运行一次的任何其他代码/功能。
【解决方案2】:

为什么不直接使用Windows Task Scheduler

将其设置为以所需的时间间隔运行您的应用。它非常适合这类工作,您不必为强制线程休眠而烦恼,这可能会产生更多它解决的问题。

【讨论】:

    【解决方案3】:

    每 X 分钟“触发”一个新进程的最简单方法可能是使用Windows Task Scheduler

    您当然可以以编程方式执行类似的操作,例如创建您自己的服务,每 X 分钟启动一次控制台应用程序。


    所有这一切都假设您确实想在下一次迭代之前关闭应用程序。或者,您可以一直保持它处于活动状态。您可以使用one of the timer classes 定期触发事件,甚至在非常简化的场景中使用Thread.Sleep....

    【讨论】:

      【解决方案4】:

      使用System.Windows.Threading.DispatcherTimer 怎么样?

      class Program
      {
          static void Main(string[] args)
          {
              DispatcherTimer timer = new DispatcherTimer();
              timer.Interval = new TimeSpan(0, 5, 0); // sets it to 5 minutes
              timer.Tick += new EventHandler(timer_Tick);
              timer.Start();
          }
      
          static void timer_Tick(object sender, EventArgs e)
          {
              // whatever you want to happen every 5 minutes
          }
      
      }
      

      【讨论】:

      • 您只需要在此处阻止关闭控制台应用程序即可。
      • 在末尾加上Console.ReadLine(),它将继续运行。
      猜你喜欢
      • 2011-04-26
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      相关资源
      最近更新 更多