C#服务无法运行无限次

时间:2018-03-12 14:43:37

标签: c#

我有一个c#服务,它执行数据库续订。每隔一小时。我已将其上传到服务器中。我把它调整到几秒钟,它工作了几次,然后不再工作。如果我按一下它也可以工作。 我如何让它每小时都工作,永远? (直到我停止)。

我尝试将循环更改为i <100000,并没有区别。

代码:  Program.cs的

var startTimeSpan = TimeSpan.Zero;
            var periodTimeSpan = TimeSpan.FromSeconds(3600);
            var timer = new System.Threading.Timer((e) =>
             {
"insert database"
}  } ,null, startTimeSpan, periodTimeSpan);

main.cs

static void Main()
        {
            Service1 myService = new Service1();
            myService.OnDebug();
            System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);

            // 0, ,0, 10 seconds. adjust accordingly.
            TimeSpan interval = new TimeSpan(0, 0, 5);

            for (int i = 0; i < 5; i++)
            {

                Thread.Sleep(interval);
            }

2 个答案:

答案 0 :(得分:0)

尝试切换到System.Timers.Timer而不是Threading.Timer

然后,您可以在完成后调用计时器的开头。

static System.Timers.Timer timer;

static void Main(string[] args)
{
    var periodTimeSpan = TimeSpan.FromSeconds(3600);
    timer = new System.Timers.Timer(periodTimeSpan.TotalSeconds);
    timer.Elapsed += Timer_Elapsed;
    timer.Start();
}

private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    //Do some stuff

    timer.Start();
}

或者你可以添加timer.AutoReset = true;以便它继续运行而不是自己启动它,我手动重新启动它,所以我可以让它在上午9点,上午12点,下午3点和下午6点运行,无论服务何时实际通过改变间隔开始。

答案 1 :(得分:0)

你应该写一个Windows服务。

请遵循以下指南:https://docs.microsoft.com/en-us/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer

然后在命令提示符中使用以下命令安装您的服务:

sc create <servicename> binpath= "<pathtobinaryexecutable>" [option1] [option2] [optionN]

如果您希望它连续运行,请将您的服务设置为自动。

使用选项标志更改服务中的参数(即更改间隔等)。