qu'est-ce qu'une différence between System.Windows.Forms.Timer()
et System.Windows.Threading.DispatcherTimer()
? Dans quels cas, faut-il les utiliser? des meilleures pratiques?
qu'est-ce qu'une différence between System.Windows.Forms.Timer()
et System.Windows.Threading.DispatcherTimer()
? Dans quels cas, faut-il les utiliser? des meilleures pratiques?
Réponses:
Windows.Forms.Timer
utilise la boucle de message de Windows Forms pour traiter les événements du minuteur. Il doit être utilisé lors de l'écriture d'événements de minutage qui sont utilisés dans les applications Windows Forms et que vous souhaitez que le minuteur se déclenche sur le thread d'interface utilisateur principal.
DispatcherTimer
est le mécanisme de synchronisation WPF. Il doit être utilisé lorsque vous souhaitez gérer le minutage de la même manière (bien que cela ne soit pas limité à un seul thread - chaque thread a son propre répartiteur) et que vous utilisez WPF. Il déclenche l'événement sur le même thread que le Dispatcher.
En général, WPF == DispatcherTimer
et Windows Forms == Forms.Timer
.
Cela étant dit, il y a aussi System.Threading.Timer
, qui est une minuterie class
qui se déclenche sur un thread séparé. C'est bon pour le timing purement numérique, où vous n'essayez pas de mettre à jour l'interface utilisateur, etc.
J'ai trouvé un bon article sur les minuteries avec de petits exemples ici: http://www.progware.org/Blog/post/Timers-in-WPF.aspx
Comme conclusion:
Si DoSomething () manipule les composants de l'interface graphique, vous devez utiliser: this.Dispatcher.Invoke (délégué (Action) {// GUI ASSOCIÉ CODE ICI} car vous ne pouvez pas accéder directement aux contrôles GUI à partir d'un thread différent. Avec DispatcherTimer, vous le faites pas besoin de faire cela.
Si DoSomething () effectue une tâche chronophage, alors l'interface graphique se fige dans le cas de DispatcherTimer. Dans le cas du Timer, ce ne sera pas le cas puisque le long méthos est exécuté dans un thread différent