qual è la differenza between System.Windows.Forms.Timer()
e System.Windows.Threading.DispatcherTimer()
? In quali casi dovremmo usarli? eventuali buone pratiche?
qual è la differenza between System.Windows.Forms.Timer()
e System.Windows.Threading.DispatcherTimer()
? In quali casi dovremmo usarli? eventuali buone pratiche?
Risposte:
Windows.Forms.Timer
utilizza il loop di messaggi di Windows Form per elaborare gli eventi del timer. Deve essere utilizzato durante la scrittura di eventi di temporizzazione utilizzati nelle applicazioni Windows Form e si desidera che il timer si attivi sul thread dell'interfaccia utente principale.
DispatcherTimer
è il meccanismo di temporizzazione WPF. Dovrebbe essere utilizzato quando si desidera gestire i tempi in modo simile (sebbene questo non sia limitato a un singolo thread: ogni thread ha il proprio dispatcher) e si utilizza WPF. Attiva l'evento sullo stesso thread del Dispatcher.
In generale, WPF == DispatcherTimer
e Windows Forms == Forms.Timer
.
Detto questo, c'è anche System.Threading.Timer
, che è un timer class
che si attiva su un thread separato. Questo è un bene per i tempi puramente numerici, in cui non stai cercando di aggiornare l'interfaccia utente, ecc.
Ho trovato un buon articolo sui timer con piccoli esempi qui: http://www.progware.org/Blog/post/Timers-in-WPF.aspx
Come conclusione:
Se DoSomething () manipola i componenti della GUI, allora con il Timer devi usare: this.Dispatcher.Invoke ((Action) delegate {// GUI RELATED CODE HERE} poiché non puoi accedere direttamente ai controlli della GUI da un thread diverso. Con DispatcherTimer lo fai non è necessario farlo.
Se DoSomething () esegue come un'attività che richiede tempo, la GUI si bloccherà nel caso del DispatcherTimer. Nel caso del Timer non lo farà poiché il methos lungo viene eseguito in un thread diverso