如何在 windows 服务应用程序中的 运行 时间创建多个计时器
How to create multiple timers on the run time in windows service Application
我正在尝试根据我将从
数据库?所以在 onStart() 方法上,我从数据库中获取数据并将其保存在列表中,然后循环此列表并为每个任务创建计时器并将此计时器保存在列表中
for(int i=0;i<ScheduleTask.Count;i++)
{
Timer t = new Timer(new TimerCallback(_=>Task(i)));
DateTime scheduledTime = DateTime.MinValue;
scheduledTime = DateTime.Now.AddMinutes(ScheduleTask[i].intervalMinutes);
TimeSpan TimeSpan = scheduledTime.Subtract(DateTime.Now);
int dueTime = Convert.ToInt32(TimeSpan.TotalMilliseconds);
t.Change(dueTime, Timeout.Infinite);
timers.Add(t);
}
我希望每个任务都调用相同的方法,但将任务的索引传递给此方法
但索引始终等于计划任务的最后一个索引
private void Task(int index)
{
try
{
this.WriteToFile("*************" + ScheduleTask[index].Name + " Started*****************");
//task start
this.WriteToFile("*************" + ScheduleTask[index].Name + " Finished successfully {0}*****************");
}
catch
{
this.WriteToFile("*************something went wrong on index: " + index + "*****************");
}
}
我该怎么办?
C# 引用局部变量 i,它在循环结束时具有最后一个索引的值。
解决此问题的简单技巧:
int j = i;
Timer t = new Timer(new TimerCallback(_ => Task(j)));
我正在尝试根据我将从 数据库?所以在 onStart() 方法上,我从数据库中获取数据并将其保存在列表中,然后循环此列表并为每个任务创建计时器并将此计时器保存在列表中
for(int i=0;i<ScheduleTask.Count;i++)
{
Timer t = new Timer(new TimerCallback(_=>Task(i)));
DateTime scheduledTime = DateTime.MinValue;
scheduledTime = DateTime.Now.AddMinutes(ScheduleTask[i].intervalMinutes);
TimeSpan TimeSpan = scheduledTime.Subtract(DateTime.Now);
int dueTime = Convert.ToInt32(TimeSpan.TotalMilliseconds);
t.Change(dueTime, Timeout.Infinite);
timers.Add(t);
}
我希望每个任务都调用相同的方法,但将任务的索引传递给此方法 但索引始终等于计划任务的最后一个索引
private void Task(int index)
{
try
{
this.WriteToFile("*************" + ScheduleTask[index].Name + " Started*****************");
//task start
this.WriteToFile("*************" + ScheduleTask[index].Name + " Finished successfully {0}*****************");
}
catch
{
this.WriteToFile("*************something went wrong on index: " + index + "*****************");
}
}
我该怎么办?
C# 引用局部变量 i,它在循环结束时具有最后一个索引的值。 解决此问题的简单技巧:
int j = i;
Timer t = new Timer(new TimerCallback(_ => Task(j)));