将Timer与DispatcherTimer进行比较

时间:2009-07-10 19:55:24

标签: c# timer

有什么区别between System.Windows.Forms.Timer()System.Windows.Threading.DispatcherTimer()?在哪些情况下,我们应该使用它们?任何最佳做法?

2 个答案:

答案 0 :(得分:107)

Windows.Forms.Timer使用Windows窗体消息循环来处理计时器事件。它应该在编写Windows窗体应用程序中使用的计时事件时使用,并且您希望计时器在主UI线程上触发。

DispatcherTimer是WPF计时机制。当你想以类似的方式处理时序时应该使用它(虽然这不仅限于一个线程 - 每个线程都有自己的调度程序)并且你正在使用WPF。它在与Dispatcher相同的线程上触发事件。

一般来说, WPF == DispatcherTimerWindows Forms == Forms.Timer

话虽如此,还有System.Threading.Timer,它是一个计时器class,它在一个单独的线程上触发。这对于纯粹的数字计时很有用,你不会尝试更新UI等等。

答案 1 :(得分:4)

我在这里找到了一篇关于计时器的好文章: http://www.progware.org/Blog/post/Timers-in-WPF.aspx

作为结论:

  

如果DoSomething()操作GUI组件,那么使用Timer需要使用:this.Dispatcher.Invoke((Action)delegate {// GUI RELATED CODE HERE},因为您无法直接从其他线程访问GUI控件。 DispatcherTimer你不需要这样做。

     

如果DoSomething()执行耗时的任务,那么在DispatcherTimer的情况下GUI将冻结。在Timer的情况下,它不会因为long方法在不同的线程中执行