我有一个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);
}
答案 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服务。
然后在命令提示符中使用以下命令安装您的服务:
sc create <servicename> binpath= "<pathtobinaryexecutable>" [option1] [option2] [optionN]
如果您希望它连续运行,请将您的服务设置为自动。
使用选项标志更改服务中的参数(即更改间隔等)。