我知道在.NET中有三种计时器类型。
我选择了一个线程计时器,但是如果主线程繁忙,其他类型的计时器可能会漂移,因此我需要确保它的可靠性。
此计时器在计时器控制中的工作方式放置在另一个线程上,因此当它不忙时,它始终可以与父线程上的工作一起开始计时。
控制台应用程序中此计时器的问题在于,当计时器在另一个线程上滴答作响时,主线程没有执行任何操作,因此该应用程序关闭了。
解决方案:
考虑使用ManualResetEvent在处理结束时阻塞主线程,并在计时器的处理完成后在其上调用Reset()
。如果这是需要不断运行的内容,请考虑将其移入服务进程而不是控制台应用程序。
我们可以使用诸如" Console.ReadLine()"之类的东西来阻塞主线程,因此其他后台线程(例如计时器线程)仍然可以工作。我们还可以使用AutoResetEvent阻止执行,然后(在需要时)可以在该AutoResetEvent对象上调用Set()方法以释放主线程。还要确保对Timer对象的引用不会超出范围并不会进行垃圾回收。
日期:2020-03-23 10:49:47 来源:oir作者:oir