2

我正在尝试使用 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

4 回答 4

4

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

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

于 2012-06-19T09:44:22.013 回答
2

您的程序将在 main 函数终止的那一刻退出。

您需要防止 main 退出,直到您准备好,可能使用 Console.ReadLine();

于 2012-06-19T09:46:42.867 回答
0

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

Console.ReadLine(); 
于 2012-06-19T09:45:50.217 回答
0

程序在 IP.timer1.Start() 之后立即退出的原因是它执行完 Main() 函数并且没有什么阻止它返回。

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

于 2012-06-19T09:58:39.637 回答