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

John 88 .net c# vb.net timer

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

此计时器在计时器控制中的工作方式是放在另一个线程上,因此它可以随时在父线程不忙时在工作开始时完成.

控制台应用程序中此计时器的问题是,当计时器正在另一个线程上时,主线程没有对应用程序执行任何操作.

我尝试添加while true循环,但是当计时器关闭时主线程太忙了.

huseyint.. 53

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


Greg Hurlman.. 19

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