qual é a diferença between System.Windows.Forms.Timer()
e System.Windows.Threading.DispatcherTimer()
? Em quais casos devemos usá-los? alguma prática recomendada?
qual é a diferença between System.Windows.Forms.Timer()
e System.Windows.Threading.DispatcherTimer()
? Em quais casos devemos usá-los? alguma prática recomendada?
Respostas:
Windows.Forms.Timer
usa o loop de mensagem do Windows Forms para processar eventos de cronômetro. Deve ser usado ao escrever eventos de temporização que estão sendo usados em aplicativos Windows Forms e você deseja que o temporizador seja acionado no thread de interface do usuário principal.
DispatcherTimer
é o mecanismo de temporização do WPF. Ele deve ser usado quando você deseja lidar com o tempo de maneira semelhante (embora isso não se limite a um único thread - cada thread tem seu próprio despachante) e está usando o WPF. Ele dispara o evento no mesmo encadeamento que o Dispatcher.
Em geral, WPF == DispatcherTimer
e Windows Forms == Forms.Timer
.
Dito isto, também System.Threading.Timer
existe um temporizador class
que dispara em um thread separado. Isso é bom para tempo puramente numérico, em que você não está tentando atualizar a IU, etc.
Encontrei um bom artigo sobre timers com pequenos exemplos aqui: http://www.progware.org/Blog/post/Timers-in-WPF.aspx
Como uma conclusão:
Se DoSomething () manipula os componentes da GUI, então com o Timer você precisa usar: this.Dispatcher.Invoke ((Action) delegate {// GUI RELATED CODE HERE} já que você não pode acessar os controles da GUI diretamente de uma thread diferente. Com o DispatcherTimer você faz não precisa fazer isso.
Se DoSomething () realizar uma tarefa demorada, a GUI irá travar no caso do DispatcherTimer. No caso do Timer não o fará, pois o método longo é executado em um thread diferente