我正在尝试在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.
}
}
答案 0 :(得分:3)
原因是计时器的Start
方法在另一个线程上启动计时器,并立即从该方法返回。这会导致您的Main
方法结束,并且控制台将关闭。
根据您使用的Timer
(BCL中有一些类似命名的类),您可能希望以不同方式实现修复。我建议您阅读System.Timers.Timer,System.Windows.Forms.Timer或System.Threading.Timer上的文档,具体取决于您使用的文档。
答案 1 :(得分:2)
您的程序将在主函数终止时退出。
你需要阻止main退出,直到你准备好,可能还有一个Console.ReadLine();
答案 2 :(得分:1)
计时器在另一个线程上启动,使用以下命令暂停线程,直到用户在计时器启动后点击一个键。
Console.ReadLine();
答案 3 :(得分:0)
程序在IP.timer1.Start()之后立即退出的原因是它执行了Main() - 函数并且没有任何东西阻止它返回。
如果您想要一种简单的方法来保持程序运行,您可以添加Console.ReadKey();在timer1.Start()之后;这样您的应用程序将等到该函数返回(即按任意键时)。执行此操作后,应按指定的每五秒调用一次回调。