我知道在 。网 共有三种定时器类型(参见 比较 .NET Framework 类库中的计时器类)。我选择了线程计时器,因为如果主线程繁忙,其他类型可能会漂移,并且我需要它可靠。

这个定时器的工作方式是把定时器的控制放在另一个线程上,这样当它不忙的时候,它总是可以随着父线程上完成的工作一起滴答作响。

控制台应用程序中此计时器的问题在于,当计时器在另一个线程上计时时,主线程不会对应用程序关闭执行任何操作。

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

有帮助吗?

解决方案

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

其他提示

考虑使用 手动重置事件 在处理结束时阻塞主线程,并调用 Reset() 定时器处理完成后就可以使用它。如果这需要不断运行,请考虑将其移至服务进程而不是控制台应用程序中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top