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

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

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

这个定时器在控制台应用程序中的问题是,当定时器在另一个线程上滴答滴答时,主线程没有做任何事情,因此应用程序关闭。

我尝试在true 循环中添加,但是当定时器关闭时主线程太忙。

0
额外 编辑
意见: 13

2 答案

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

0
额外

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

0
额外