什么是实现线程计时器的最佳方法

时间:2010-03-16 13:04:38

标签: c# multithreading timer

使用计时器的最佳方法是什么。使用System.Timer.Timer类或在带有Thread.Sleep语句的非终止循环中使用单个Thread?

提前致谢

3 个答案:

答案 0 :(得分:3)

通常,如果满足您的需求,请使用已存在的组件。但是,System.Threading.Timer使用.NET线程池,因此以下任何条件都会使其成为一个糟糕的候选者:

  • 您需要一个STA线程(所有ThreadPool个线程都是MTA)
  • 您要求所有重复的任务都在同一个线程上运行
  • 您希望为任务分配特定优先级(更低或更高)
  • 您的任务特别长时间运行或使用非平凡的块

答案 1 :(得分:0)

使用计时器。它就在那里,专门用于那个目的,为什么你不用它?

答案 2 :(得分:0)

您引用的两种方法用于不同的结果。

计时器将触发事件并按计划的间隔调用您的方法。他们可以调用你的方法,而另一个实例正在运行,除非你在处理开始时停止计时器(DoWork)并在你完成时再次启动它(但是你可能会错过定时事件)。

循环和休眠的方法在繁忙时不会被调用。这里的“优势”是你可以DoWork,然后发现下一个计时器事件已经通过,DoWork立即再次。另一种方法是,无论DoWork方法花费多长时间,您都有休息时间,在此期间您可以睡眠指定的时间。