定时器间隔未按预期工作

时间:2013-12-16 01:25:24

标签: c# timer

private void btnProveri_Click(object sender, EventArgs e)
{
    lblRezultat.Text = DateTime.Now.ToString();
    timer1.Interval = 1800;
    timer1.Start();
    MessageBox.Show(DateTime.Now.ToString());
}

private void timer1_Tick(object sender, EventArgs e)
{
    timer1.Enabled = true;
    timer1.Interval = 1800;
}

我是一个试图学习计时器的新手,这是我上面的代码。我想制作一个持续1.8秒的计时器。然后我在单击按钮时调用它,第一次将标签设置为特定日期,然后我将间隔设置为计时器并启动它,但消息框输出相同的时间(完全没有延迟)。

2 个答案:

答案 0 :(得分:3)

那是因为您在创建计时器的相同代码中显示消息框。有效:

buttonClick:
    Populate some text field.
    Start timer so that it calls timerTick in 1.8 seconds
    Display message box

timerTick:
    Restart timer so it calls this function in 1.8 seconds.

如您所见,按下按钮时会显示消息框,而不会在计时器触发时显示。当计时器触发时,您所做的只是将其设置为在另一个 1.8秒内再次触发,但此时您实际上并未执行任何其他操作。

如果要在计时器触发后显示它,则必须在计时器功能timer1_Tick中完成。但是你可能要小心,可能可能你最终会得到相当多的对话框。

答案 1 :(得分:0)

看起来你想做这样的事情:

private void btnProveri_Click(object sender, EventArgs e)
{
    lblRezultat.Text = DateTime.Now.ToString();
    var timer = new System.Timers.Timer(1800);
    timer.Start();
    timer.Elapsed += timer1_Tick;
}

private void timer1_Tick(object sender, System.Timers.ElapsedEventArgs e)
{
    MessageBox.Show(DateTime.Now.ToString());
}

以下是工作控制台示例:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("App started");
        var timer = new System.Timers.Timer(1800);
        timer.Start();
        timer.Elapsed += timerHandler;
        Console.ReadLine();
    }

    private static void timerHandler(object sender, System.Timers.ElapsedEventArgs e)
    {
        Messenger(DateTime.UtcNow.ToString());
    }

    private static void Messenger(string time)
    {
        Console.WriteLine(time);
    }
}