2014-01-24 68 views
1

所以我有这个简单的代码:从.Net.Timer后关闭,防止我的控制台应用程序启动

static void Main(string[] args) 
    { 
     var timer = new Timer(0.5 * 60 * 1000); // 0.5 minutes times 60 seconds times 1000 miliseconds 
     timer.Elapsed += new System.Timers.ElapsedEventHandler(Start); 
     timer.AutoReset = true;    
     timer.Start(); 
    } 

哪个开始启动整个程序逻辑的计时器。问题是,控制台应用程序关闭,没有任何事情完成。我如何防止这种情况?我知道,如果我做了一些像(true)一样的东西,但它看起来并不像是一个优雅/合适的解决方案。

+0

由于'timer.Start()'方法触发新线程。一旦你调用它,它不会阻止你当前的(主)线程。 如果您正在等待计时器完成,您可能会想要使用回调。 – Brandon

+1

“不关闭”是什么意思?坚持到永远?只需使用Console.ReadLine() –

+0

@Brandon我知道这一点。这就是为什么我说的是(真)的事情。标题是阻止我的控制台应用程序关闭,这并没有帮助我。 – Gaspa79

回答

5

也许尝试

Console.Read(); 

在代码的最后

由于这个控制台窗口将不会只要用户将不会按一个键关闭。

-1

由于定时器启动,您的控制台应用程序不会结束。它结束是因为程序到达Main()方法的末尾。

无论您采取什么措施来防止程序退出Main()都会有所帮助。虽然许多提出的解决方案实际上是这样做我想强调一下这个事实,即它不是导致问题的计时器。

1

添加Console.ReadKey();这将允许您通过按任意键关闭控制台窗口。

static void Main(string[] args) 
    { 
     var timer = new Timer(0.5 * 60 * 1000); // 0.5 minutes times 60 seconds times 1000 miliseconds 
     timer.Elapsed += new System.Timers.ElapsedEventHandler(Start); 
     timer.AutoReset = true;    
     timer.Start(); 

     Console.ReadKey(); 
    } 
1

如果你想只运行一个计时器并等待,那么Console.Read()是你的朋友。

你的代码终止的原因是因为函数初始化定时器,启动定时器,然后......打到Main函数的末尾。结果,该功能退出。

当前的代码没有做任何有用的事情(除了启动一个被忽略的定时器)。

如果您想看到您的计时器正在运行,请在启动计时器后执行其他一些工作。然后,在一段时间后停止计时器并打印/评估您认为合适的方式。 (定时器不会在主线程上运行,而类似于Console.Read()的东西将会在主线程上,因此,在输入之前会阻塞线程)

相关问题