quelle est la différence between System.Windows.Forms.Timer()
et System.Windows.Threading.DispatcherTimer()
? Dans quels cas, devrions-nous les utiliser? des meilleures pratiques?
Windows.Forms.Timer
utilise la boucle de messages de Windows Forms pour traiter les événements du minuteur. Il doit être utilisé lors de l'écriture des événements de synchronisation utilisés dans les applications Windows Forms, et 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 timing de manière similaire (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 répartiteur.
En général, WPF == DispatcherTimer
et Windows Forms == Forms.Timer
.
Cela étant dit, il y a aussi System.Threading.Timer
, qui est un minuteur class
qui se déclenche sur un thread séparé. C'est bon pour le chronométrage 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 des composants GUI, alors avec le Timer vous devez utiliser: this.Dispatcher.Invoke ((Action) délégué {// GUI RELATED ICI} puisque vous ne pouvez pas accéder directement aux contrôles GUI depuis un autre thread. Avec DispatcherTimer vous le faites pas besoin de faire ça.
Si DoSomething () effectue une tâche qui prend du temps, l'interface graphique se fige dans le cas du DispatcherTimer. Dans le cas du Timer, ce ne sera pas le cas car le long méthos est exécuté dans un thread différent