线程中的定时器在时间间隔后不再调用方法

时间:2018-02-09 15:46:01

标签: c#

我尝试在下面的代码中找出问题。 timer仅为第一个实例调用方法,但在2500毫秒时间间隔后不调用它。有什么东西我错过了.Below是我的代码

public class Program
{
    public void CheckStatus(object stateInfo)
    {
        Console.WriteLine("I am Executed");
    }

    public static void Main(string[] args)
    {
        try
        {
            Program p = new Program();
            Console.WriteLine("Creating timer.\n");
            var stateTimer = new Timer(state => p.CheckStatus(state), null, 0, 2500);
        }

        catch (Exception ex)
        {
            Console.WriteLine("Exception");
        }
    }
}

在上面的代码中,我每隔2500毫秒执行一次“CheckStatus”方法,并且首次执行它应该立即执行(将参数传递为0) 我也尝试用时间跨度替换时间值,但它对我来说也没有用

1 个答案:

答案 0 :(得分:0)

您的程序在第二次间隔点火之前存在。等待以下某个方式查看下一个时间间隔的回调。控制台示例最常见的方式是ReadLine(更多选项 - How to stop C# console applications from closing automatically?):

Console.WriteLine("Creating timer.\n");
var stateTimer = new Timer(state => p.CheckStatus(state), null, 0, 2500);
Console.ReadLine();

如果使用Timer偶数Thread.Sleep(10000);,则会在单独的线程上运行计时器回调。

注意:计时器停止触发的另一个标准原因是计时器被垃圾收集,但样本中并非如此。有关详细信息,请参阅System.Threading.Timer not firing after some time