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

Translate

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

此计时器在计时器控制中的工作方式放置在另一个线程上,因此当它不忙时,它始终可以与父线程上的工作一起开始计时。

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

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

This question and all comments follow the "Attribution Required."

所有的回答

Translate

您可以使用类似Console.ReadLine()阻止主线程,因此其他后台线程(如计时器线程)仍将起作用。您也可以使用AutoResetEvent要阻止执行,则可以在需要时调用该AutoResetEvent对象的Set()方法以释放主线程。还要确保对Timer对象的引用不会超出范围并不会进行垃圾回收。

来源
Translate

考虑使用ManualResetEvent在处理结束时阻塞主线程,然后调用Reset()一旦计时器的处理完成,就可以对其进行操作。如果这是需要不断运行的内容,请考虑将其移入服务进程而不是控制台应用程序。

来源