代码之家  ›  专栏  ›  技术社区  ›  John

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

  •  88
  • John  · 技术社区  · 17 年前

    我知道在 .NET 有三种计时器类型(请参见 Comparing the Timer Classes in the .NET Framework Class Library )我已经选择了一个线程计时器,因为如果主线程繁忙,其他类型的计时器可能会发生漂移,我需要这一点是可靠的。

    这个计时器在计时器控件中的工作方式被放置在另一个线程上,这样当父线程不忙时,它总是可以随着父线程上的工作开始而勾选。

    控制台应用程序中这个计时器的问题是,当计时器在另一个线程上滴答滴答时,主线程不会对应用程序关闭做任何操作。

    我试图添加 while true 循环,但当计时器确实关闭时,主线程太忙。

    2 回复  |  直到 6 年前
        1
  •  53
  •   Paul Fleming    13 年前

    你可以用类似的东西 Console.ReadLine() 阻止主线程,这样其他后台线程(如计时器线程)仍将工作。您也可以使用 AutoResetEvent 若要阻止执行,则(当需要时)可以对autoreseteevent对象调用set()方法以释放主线程。还要确保对计时器对象的引用不会超出范围并被垃圾收集。

        2
  •  19
  •   Paul Fleming    13 年前

    考虑使用 ManualResetEvent 在处理结束时阻塞主线程,并调用 Reset() 一旦计时器的处理完成,就打开它。如果这是需要持续运行的东西,请考虑将其移动到服务流程中,而不是控制台应用程序中。