4

我有一个计时器滴答,我想每 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

4 回答 4

15

计时器的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();
    }
}
于 2012-04-04T12:39:40.740 回答
4

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

_timer.Interval = TimeSpan.FromMinutes(30).TotalMilliseconds;
于 2016-03-16T09:26:45.550 回答
0

没有很好地回答问题。但如果你只想要 30 分钟的间隔,那么给 timer1.interval = 1800000;

// 一毫秒有 10,000 个滴答声(不要忘记这个)

于 2012-04-04T13:07:00.253 回答
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
}
于 2016-10-24T02:31:51.727 回答