比较Timer和DispatcherTimer
between System.Windows.Forms.Timer()
和System.Windows.Threading.DispatcherTimer()
什么区别? 在哪种情况下,我们应该使用它们? 任何最佳实践?
Windows.Forms.Timer
使用Windows窗体消息循环来处理计时器事件。 在编写Windows窗体应用程序中使用的计时事件时应该使用它,并且您希望计时器在主UI线程上触发。
DispatcherTimer
是WPF计时机制。 当你想以类似的方式处理时序时,应该使用它(尽pipe这不仅限于单个线程 – 每个线程都有自己的调度器),而且您正在使用WPF。 它在与分派器相同的线程上触发事件。
一般来说, WPF == DispatcherTimer
和Windows Forms == Forms.Timer
。
这就是说,还有System.Threading.Timer
,这是一个计时器class
,在一个单独的线程上触发。 这对于纯粹的数字计时是非常好的,你不需要更新界面等。
我在这里find了很好的有关定时器的小文章: http : //www.progware.org/Blog/post/Timers-in-WPF.aspx
作为结论:
如果DoSomething()处理GUI组件,那么使用Timer需要使用:this.Dispatcher.Invoke((Action)delegate {// GUI RELATED CODE HERE},因为不能直接从不同的线程访问GUI控件。不需要那样做。
如果DoSomething()执行耗时的任务,那么在DispatcherTimer的情况下,GUI将冻结。 在定时器的情况下,它不会因为长的方法在不同的线程中执行