控制台应用程序中的可靠计时器

asaepe 发布于 2018-02-02 .net 最后更新 2018-02-02 11:40 1000 浏览

我知道在.NET中有三种计时器类型(请参阅Comparing the Timer Classes in the .NET Framework Class Library)。我选择了一个线程计时器,因为如果主线程忙,其他类型可能会漂移,我需要这是可靠的。 这个计时器在计时器控制中的工作方式被放在另一个线程上,所以当它不忙时,它可以随着父线程上的工作开始一直打勾。 这个计时器在控制台应用程序中的问题是,当计时器在另一个线程上滴答时,主线程没有做任何事情,所以应用程序关闭。 我尝试添加一个while true循环,但是当定时器关闭时主线程太忙了。

已邀请:

ehic

赞同来自:

考虑在处理结束时使用ManualResetEvent来阻塞主线程,并在定时器处理完成后调用Reset()。如果这是需要不断运行的东西,请考虑将其转换为服务进程而不是控制台应用程序。

malias

赞同来自:

你可以使用像Console.ReadLine()这样的东西来阻塞主线程,所以其他后台线程(如定时器线程)仍然可以工作。您也可以使用AutoResetEvent来阻止执行,然后(如果需要)您可以调用该AutoResetEvent对象上的Set()方法来释放主线程。同时确保您对Timer对象的引用不会超出范围并收集垃圾。