题
我知道在 。网 共有三种定时器类型(参见 比较 .NET Framework 类库中的计时器类)。我选择了线程计时器,因为如果主线程繁忙,其他类型可能会漂移,并且我需要它可靠。
这个定时器的工作方式是把定时器的控制放在另一个线程上,这样当它不忙的时候,它总是可以随着父线程上完成的工作一起滴答作响。
控制台应用程序中此计时器的问题在于,当计时器在另一个线程上计时时,主线程不会对应用程序关闭执行任何操作。
我尝试添加一个 while true
循环,但是当计时器关闭时主线程太忙了。
解决方案
你可以使用类似的东西 Console.ReadLine()
阻止主线程,因此其他后台线程(如计时器线程)仍然可以工作。您还可以使用 自动重置事件 阻止执行,然后(当需要时)您可以调用 AutoResetEvent 对象上的 Set() 方法来释放主线程。还要确保对 Timer 对象的引用不会超出范围并被垃圾收集。
其他提示
考虑使用 手动重置事件 在处理结束时阻塞主线程,并调用 Reset()
定时器处理完成后就可以使用它。如果这需要不断运行,请考虑将其移至服务进程而不是控制台应用程序中。
不隶属于 StackOverflow