¿Qué es una diferencia between System.Windows.Forms.Timer()
y System.Windows.Threading.DispatcherTimer()
? ¿En qué casos deberíamos utilizarlos? alguna de las mejores prácticas?
¿Qué es una diferencia between System.Windows.Forms.Timer()
y System.Windows.Threading.DispatcherTimer()
? ¿En qué casos deberíamos utilizarlos? alguna de las mejores prácticas?
Respuestas:
Windows.Forms.Timer
utiliza el bucle de mensajes de Windows Forms para procesar los eventos del temporizador. Se debe usar al escribir eventos de temporización que se usan en aplicaciones de Windows Forms y desea que el temporizador se active en el subproceso principal de la interfaz de usuario.
DispatcherTimer
es el mecanismo de temporización de WPF. Debe usarse cuando desee manejar el tiempo de manera similar (aunque esto no se limita a un solo subproceso; cada subproceso tiene su propio despachador) y está usando WPF. Activa el evento en el mismo hilo que el Dispatcher.
En general, WPF == DispatcherTimer
y Windows Forms == Forms.Timer
.
Dicho esto, también System.Threading.Timer
existe un temporizador class
que se activa en un hilo separado. Esto es bueno para tiempos puramente numéricos, donde no está intentando actualizar la interfaz de usuario, etc.
Encontré un buen artículo sobre temporizadores con pequeños ejemplos aquí: http://www.progware.org/Blog/post/Timers-in-WPF.aspx
Como conclusión:
Si DoSomething () manipula los componentes de la GUI, entonces con el temporizador debe usar: this.Dispatcher.Invoke ((Action) delegate {// GUI RELATED CODE HERE} ya que no puede acceder a los controles de la GUI desde un hilo diferente directamente. Con DispatcherTimer lo hace no es necesario hacer eso.
Si DoSomething () realiza una tarea que requiere mucho tiempo, la GUI se congelará en el caso de DispatcherTimer. En el caso del temporizador no lo hará ya que los métodos largos se ejecutan en un hilo diferente