定时器控制间隔

时间:2011-05-19 09:56:59

标签: c# events timer

我在C#.net项目中使用了一个定时器控件,定时器间隔为5秒。 在timer_tick方法中,我调用另一种计算方法,需要5分钟才能完成。 我的问题是timer_tick方法将每隔5秒调用一次,否则它将等待前一个进程完成? 在我的测试中,我在调用计算方法之前将当前时间写入输出窗口。 所以,我发现它总是等待前面的过程完成。如果它是正确的,那么,什么是定时器间隔? 我的测试代码是这样的,

private void timer1_Tick(object sender, EventArgs e)
{ 
    Console.WriteLine(DateTime.Now.ToString());
    CalculationMethod();
}

此致

4 个答案:

答案 0 :(得分:4)

这完全取决于您使用的计时器类型!以下文章提供了3个框架计时器行为的综合指南:

http://msdn.microsoft.com/en-us/magazine/cc164015.aspx

有些人会保证不断勾选(尽可能他们)其他人会跳过,或暂停他们的滴答声。

答案 1 :(得分:2)

Tick事件对timer1_Tick方法进行阻塞(同步)调用,因此如果方法需要很长时间,它将等待。它适用于可在给定时间范围内完成的事情。

如果你真的需要每5秒调用一次这个方法,每次都为它们生成新的线程:

private void timer1_Tick(object sender, EventArgs e)
{ 
    Console.WriteLine(DateTime.Now.ToString());
    Task.Factory.StartNew(() => CalculationMethod());
}

答案 2 :(得分:1)

它等待,因为timer1_TickCalculationMethod返回之前无法返回。如果您不想等待CalculationMethod,则应将其实现为异步调用(例如,在后台工作)。

答案 3 :(得分:1)

查看有关此MSDN page的评论。定时器控件是单线程,因此它将等待第一个事件完成。你应该看一下Timers class