C#timers.timer无法正常工作

时间:2012-06-19 09:42:08

标签: c# timer intervals

我正在尝试在C#中使用计时器以五秒的间隔运行一个方法。虽然这段代码似乎不起作用。运行它时我没有得到任何错误,但程序(我在控制台中运行)在IP.timer1.Start()之后立即关闭。 timer1_Elapsed方法永远不会被执行。我知道因为我已经尝试让程序在timer1_Elapsed方法的第一行打印一个字符串到控制台。

class Program
{
    Timer timer1 = new Timer();

    static void Main(string[] args)
    {
        Program IP = new Program();
        IP.timer1.Elapsed += new ElapsedEventHandler(timer1_Elapsed);
        IP.timer1.Interval = 5000;
        IP.timer1.Enabled = true;
        IP.timer1.Start();

    }

    static void timer1_Elapsed(object sender, ElapsedEventArgs e)
    {
    //Function to get executed each time the counter elapses. 
    }

}

4 个答案:

答案 0 :(得分:3)

原因是计时器的Start方法在另一个线程上启动计时器,并立即从该方法返回。这会导致您的Main方法结束,并且控制台将关闭。

根据您使用的Timer(BCL中有一些类似命名的类),您可能希望以不同方式实现修复。我建议您阅读System.Timers.TimerSystem.Windows.Forms.TimerSystem.Threading.Timer上的文档,具体取决于您使用的文档。

答案 1 :(得分:2)

您的程序将在主函数终止时退出。

你需要阻止main退出,直到你准备好,可能还有一个Console.ReadLine();

答案 2 :(得分:1)

计时器在另一个线程上启动,使用以下命令暂停线程,直到用户在计时器启动后点击一个键。

Console.ReadLine(); 

答案 3 :(得分:0)

程序在IP.timer1.Start()之后立即退出的原因是它执行了Main() - 函数并且没有任何东西阻止它返回。

如果您想要一种简单的方法来保持程序运行,您可以添加Console.ReadKey();在timer1.Start()之后;这样您的应用程序将等到该函数返回(即按任意键时)。执行此操作后,应按指定的每五秒调用一次回调。