2010-03-16 60 views
1

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

在此先感谢

+0

取决于你想达到的目标...如果你想要的东西有时间目的比你应该使用......等待它......定时器:D – RvdK 2010-03-16 13:15:02

回答

0

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

3

通常,如果他们满足您的需求,请使用已经存在的组件。然而,System.Threading.Timer使用.NET线程池,所以任何下列条件将使其成为一个可怜的候选人:

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

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

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

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

相关问题