Answers:
Windows.Forms.Timer
使用Windows窗体消息循环来处理计时器事件。在编写Windows Forms应用程序中正在使用的计时事件时,并且希望计时器在主UI线程上触发时,应使用它。
DispatcherTimer
是WPF计时机制。当您想以类似的方式处理计时(虽然它不仅限于单个线程-每个线程都有自己的调度程序)并且您正在使用WPF时,应使用它。它在与Dispatcher相同的线程上触发事件。
通常,WPF == DispatcherTimer
和Windows Forms == Forms.Timer
。
话虽这么说,还有System.Threading.Timer
一个计时器class
,它在单独的线程上触发。这对于纯数字计时非常有用,您无需尝试更新UI等。
我在这里找到了有关计时器的好文章,并附有一些小例子: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将冻结。在使用Timer的情况下,由于长方法在不同的线程中执行,因此不会