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

我知道在.NET中有三种计时器types(请参阅比较.NET Framework类库中的计时器类 )。 我select了一个线程计时器,因为如果主线程忙,其他types可能会漂移,我需要这是可靠的。

这个计时器在定时器控制中的工作方式被放在另一个线程上,所以当它不忙时,它可以随着在父线程上完成的工作一起打勾。

这个计时器在控制台应用程序中的问题是,当计时器在另一个线程上滴答时,主线程没有做任何事情,所以应用程序closures。

我试着添加一个while true循环,但是当定时器closures的时候,主线程太忙了。

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

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