定时器控制间隔

本文关键字:控制 定时器 | 更新日期: 2023-09-27 17:56:49

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

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

问候

印地

定时器控制间隔

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

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

有些人会保证恒定的刻度(尽其所能),其他人会跳过或暂停他们的刻度。

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

如果确实需要每 5 秒调用一次此方法,请在每次调用时为它们生成新线程:

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

它等待是因为timer1_Tick无法返回CalculationMethod返回。如果你不想等待CalculationMethod你应该把它实现为异步调用(例如在后台工作)。

查看此 MSDN 页面上的备注。计时器控件是单线程的,因此它将等待第一个事件完成。你应该看看计时器类