¿Cuál es la diferencia between System.Windows.Forms.Timer()
y System.Windows.Threading.DispatcherTimer()
? ¿En qué casos, deberíamos usarlos? ¿Alguna de las mejores prácticas?Comparación de temporizador con DispatcherTimer
Respuesta
Windows.Forms.Timer
utiliza el bucle de mensajes de formularios de Windows para procesar los eventos del temporizador. Se debe usar al escribir eventos de temporización que se utilizan en las 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 WPF. Se debe usar cuando desee manejar el tiempo de manera similar (aunque esto no está limitado a un solo hilo, cada hilo tiene su propio despachador) y está usando WPF. Dispara el evento en el mismo hilo que el Dispatcher.
En general, WPF == DispatcherTimer
y Windows Forms == Forms.Timer
.
Dicho esto, también hay System.Threading.Timer
, que es un temporizador de class
que dispara en un hilo separado. Esto es bueno para la sincronización puramente numérico, en el que no está tratando de actualizar la interfaz de usuario, etc.
que he encontrado 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 GUI, entonces con el temporizador debe usar: this.Dispatcher.Invoke ((Action) delegate {// CÓDIGO GUI RELACIONADO AQUÍ} ya que no puede acceder directamente a controles GUI desde un hilo diferente. Con DispatcherTimer no necesita hacer eso.
Si DoSomething() realiza una tarea que consume mucho tiempo, la GUI se congelará en el caso del DispatcherTimer. En el caso del temporizador no lo hará, ya que el methos largo se ejecuta en un hilo diferente
Buena referencia. – Hamed
- 1. DispatcherTimer marque una vez
- 2. DispatcherTimer frente a un temporizador regular en la aplicación WPF para un programador de tareas
- 3. DispatcherTimer aplicar intervalo y ejecutar inmediatamente
- 4. Start/Stop DispatcherTimer de un hilo diferente
- 5. ¿Cuál es la diferencia entre 'IsEnabled' y 'Start/Stop' de DispatcherTimer?
- 6. Llamada Jquery/Ajax con temporizador
- 7. ¿Cómo creo un temporizador en WPF?
- 8. Cuadro de alerta de JavaScript con temporizador
- 9. DispatcherTimer no se activa en la aplicación WPF
- 10. WPF temporizador Al igual que C# temporizador
- 11. DispatcherTimer y límites de actualización de IU en C# silverlight
- 12. comparación con int size_t
- 13. EL comparación con igualIgnoreCase
- 14. Comparación de cadenas con tolerancia
- 15. Comparación de cadenas con JSTL
- 16. comparación de fechas con javascript
- 17. Temporizador Processing.js
- 18. llamada jQuery/AJAX con un temporizador
- 19. rastrillo falla con "temporizador expiró virtual"
- 20. jquery - ¿Temporizador?
- 21. ¿Cuál es el espacio de nombre para la clase DispatcherTimer?
- 22. Temporizador de Lisp común
- 23. temporizador de cuenta regresiva
- 24. Intervalo de temporizador máximo
- 25. WPF: la eliminación de un control que tiene un DispatcherTimer no parece desaparecer
- 26. Comparación de tiempo en D
- 27. FindBugs - redundante Comparación con NULL
- 28. Comparación MySQL con valor nulo
- 29. segundos temporizador de cuenta atrás
- 30. Consulta de DynamoDB con operadores de comparación
Gracias por su pronta respuesta. Entonces, esto significa que, cada vez que quiero tener un temporizador relacionado con la IU, debería usar DispatcherTimer, y cuando quiero disparar un temporizador, que no quiero congelar UL, debo usar System.Threading.Timer en otro hilo. La segunda pregunta es: si quiero usar DispatcherTimer, y quiero tener un temporizador no vinculado a la interfaz de usuario, ¿debo llamarlo en un subproceso separado utilizando System.Threading.Timer o Still DisptacherTimer? – paradisonoir
Depende de lo que intentes hacer. Raramente utilizo System.Threading.Timer - Por lo general me quedo con Dispatcher Timer, y luego hago tu WORK (que es lo que podría bloquear tu UI) en otro hilo, usando algo como BackgroundWorker. Los temporizadores realmente nunca deberían bloquear su UI, a menos que esté haciendo un trabajo "demasiado" en su controlador de eventos. –
Tengo un problema con DispatcherTimer que consume procesador a lo largo del tiempo. ¿Hay una buena manera de manejar eso? – discorax