我在C#.net项目中使用了一个定时器控件,定时器间隔为5秒。 在timer_tick方法中,我调用另一种计算方法,需要5分钟才能完成。 我的问题是timer_tick方法将每隔5秒调用一次,否则它将等待前一个进程完成? 在我的测试中,我在调用计算方法之前将当前时间写入输出窗口。 所以,我发现它总是等待前面的过程完成。如果它是正确的,那么,什么是定时器间隔? 我的测试代码是这样的,
private void timer1_Tick(object sender, EventArgs e)
{
Console.WriteLine(DateTime.Now.ToString());
CalculationMethod();
}
此致
悠
答案 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_Tick
在CalculationMethod
返回之前无法返回。如果您不想等待CalculationMethod
,则应将其实现为异步调用(例如,在后台工作)。
答案 3 :(得分:1)
查看有关此MSDN page的评论。定时器控件是单线程,因此它将等待第一个事件完成。你应该看一下Timers class