2013-02-19 50 views
1

我有几个定时功能,运行Windows服务:窗口服务计时器设置为每周

_timer = new Timer(1 * 60 * 1000); // every 1 minute 
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); 
    _timer.Start(); 
    _fbtimer = new System.Timers.Timer(48 * 60 * 60 * 1000); 
    _fbtimer.Elapsed += new System.Timers.ElapsedEventHandler(fbtimer_Elapsed); 
    _fbtimer.Start(); 
    //Weekley Snapshot 
    _ventimer = new System.Timers.Timer(2 * 60 * 1000); 
    _ventimer.Elapsed += new System.Timers.ElapsedEventHandler(ventimer_Elapsed); 
    _ventimer.Start(); 
    //Weekly Activity 
    _tevtimer = new System.Timers.Timer(2 * 60 * 1000); 
    _tevtimer.Elapsed += new System.Timers.ElapsedEventHandler(tevtimer_Elapsed); 
    _tevtimer.Start(); 

如何设置要发生的计时器说一周一次,甚至更好的将其设置为一个特定的时间每周一天,不使用quatrz/windows调度程序或太不同的方法。

增加:这就是我如何在10

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    //log.Info("Info - Check time"); 
    DateTime startAt = DateTime.Today.AddHours(10); 
    if (_lastRun < startAt && DateTime.Now >= startAt) 
    { 
     _timer.Stop(); 
     //Stuff 
     _lastRun = DateTime.Now; 
     _timer.Start(); 
    } 
} 
+1

“不使用quatrz/windows调度程序”。 **坏主意** – AgentFire 2013-02-19 09:25:46

+0

确定任何建议最好/简单的方法来实现石英在这种方法,因为我已经尝试过没有运气 – Beginner 2013-02-19 09:27:02

+0

如果你改变'AddHours(10)'为'AddDays(7)'你有答案你自己的问题。 – 2013-02-19 09:28:43

回答

3

运行的日常任务,而无需使用quatrz/Windows计划或太大的不同方法。

为什么重新发明轮子,很差?无论如何,每周计时器不会有太大的好处。如果您将计时器编码为等待一周,并且该计算机在本周中途重新启动以进行更新,该怎么办?计时器将再次开始等待一周。

你最好让它运行一个小的时间间隔,并检查每次是否该运行你想要的方法。这样您可以预先计算'事件时间'并每次检查它。

+0

原因是我曾尝试实施石英,并没有发现它直接前进。也许你可以告诉我最好的方法,请做什么?我试着在网站上下面的教程 – Beginner 2013-02-19 09:23:21

+1

@Beginner我认为CodeCaster意味着你设置了一个小时计时器,它检查一个DateTime变量,它存储例程应运行的下一个日期和时间。如果日期和时间过去,请运行该方法并更新下一次运行的DateTime变量。 – 2013-02-19 09:26:48

+0

有点像我正在做我的第一个计时器?请参阅添加到问题 – Beginner 2013-02-19 09:28:39