什么相当于30分钟的计时器滴答?

时间:2012-04-04 12:37:04

标签: c# timer

我有一个计时器打勾,我想每隔30分钟开始我的背景工作。计时器滴答的等效值是30分钟?

下面是代码:

        _timer.Tick += new EventHandler(_timer_Tick);
        _timer.Interval = (1000) * (1);              
        _timer.Enabled = true;                       
        _timer.Start();       

    void _timer_Tick(object sender, EventArgs e)
    {
        _ticks++;
        if (_ticks == 15)
        {
            if (!backgroundWorker1.IsBusy)
            {
                backgroundWorker1.RunWorkerAsync();
            }

            _ticks = 0;
        }
    }

我不确定这是不是最好的方式,或者是否有人有更好的建议。

4 个答案:

答案 0 :(得分:13)

计时器的Interval属性以毫秒为单位,而不是刻度。

因此,对于每30分钟触发一次的计时器,只需执行以下操作:

// 1000 is the number of milliseconds in a second.
// 60 is the number of seconds in a minute
// 30 is the number of minutes.
_timer.Interval = 1000 * 60 * 30;

但是,我不清楚您使用的Tick事件是什么。我想你的意思是Elapsed

编辑正如CodeNaked所说,您谈论的是System.Windows.Forms.Timer,而不是System.Timers.Timer。幸运的是,我的回答适用于:)

最后,我不明白为什么要在_ticks方法中保留一个计数(timer_Tick)。你应该按如下方式重写它:

void _timer_Tick(object sender, EventArgs e)
{
    if (!backgroundWorker1.IsBusy)
    {
        backgroundWorker1.RunWorkerAsync();
    }
}

答案 1 :(得分:4)

为了使代码更具可读性,您可以使用TimeSpan类:

_timer.Interval = TimeSpan.FromMinutes(30).TotalMilliseconds;

答案 2 :(得分:0)

没有得到好的问题。但是,如果你只想要30分钟的间隔然后给 timer1.interval = 1800000;

//一毫秒内有10,000个刻度(别忘了这个)

答案 3 :(得分:0)

using Timer = System.Timers.Timer;

[STAThread]

static void Main(string[] args) {
    Timer t = new Timer(1800000); // 1 sec = 1000, 30 mins = 1800000 
    t.AutoReset = true;
    t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
    t.Start(); 
}

private static void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
// do stuff every 30  minute
}