如何在后台持续运行C#控制台应用程序

4
我想知道如何每隔五分钟在后台运行一个C#程序。下面的代码不是我想要作为后台进程运行的代码,但我想找到最好的方法来使用这段代码,以便我可以将其实现在另一段代码中。因此,这个进程应该在每隔五分钟后运行。我知道我可以使用线程来实现,但不知道如何实现。我知道这是在后台运行控制台应用程序的最佳方式,但如何让代码每隔五分钟运行呢?
 class Program
    {
        static void Main(string[] args)
        {
            Console.Write("hellow world");
            Console.ReadLine();
        }
    }

如果在应用程序中没有输出,您应该考虑创建一个服务。 - Theodoros Chatzigiannakis
如果应用程序没有输出,为什么要写“Console.Write”? - Soner Gönül
这是同一个问题吗?https://dev59.com/znE85IYBdhLWcg3wnU-p - Glory Raj
1
或者使用Windows计划任务每5分钟运行它。 - VeNoMiS
2
使用TopShelf创建Windows服务,然后在While(true)范围内放置Thread.Sleep(5601000)。 - Kamil Budziewski
你想编写一个每5分钟执行一次的程序吗?或者你有一个没有源代码访问权限的程序,想要每5分钟启动一次它? - Werner Henze
4个回答

10

这个应用程序应该持续运行,每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
        }

    }
}

1
@Cemafor在我的评论后编辑了答案。他最初的代码将在任何时间间隔下运行。由于它已不再相关,我已将其删除。 - DGibbs
1
为什么需要使用while循环? - user2543131
while(true)会让循环无限运行,直到你终止应用程序。 - DGibbs
需要使用while true来防止应用程序到达结尾。 - VeNoMiS
是的,但它会休眠五分钟而不是每五分钟运行一次。 - user2543131
1
Console.Write 将每隔5分钟运行一次。将该行替换为您想要每隔5分钟运行的其他代码/函数。 - abelenky

7

为什么不直接使用Windows任务计划程序

将其设置为在所需的时间间隔运行您的应用程序。它非常适合这种类型的工作,而且您不必烦恼地强制线程睡眠,这可能会引起更多问题。


2
如何使用 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
    }

}

1
你只需要防止控制台应用程序在此处关闭即可。 - Teoman shipahi
在结尾处加上 Console.ReadLine(),程序将会一直运行。 - Robert Koritnik

1

也许最简单的每隔X分钟启动新进程的方法是使用Windows任务计划程序

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


所有这些都是在假设下,您实际上希望在下一次迭代之前关闭应用程序。或者,您可能只想一直保持其活动状态。您可以使用计时器类之一定期触发事件,甚至在非常简化的情况下使用Thread.Sleep


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接