Ho un System.Threading.Timer che chiama il relativo gestore di eventi (callback) ogni 10 ms. Il metodo stesso è non rientrante e talvolta può richiedere molto più lungo di 10 ms. Pertanto, voglio interrompere il timer durante l'esecuzione del metodo.Arresto del timer nel suo metodo di richiamata
Codice:
private Timer _creatorTimer;
// BackgroundWorker's work
private void CreatorWork(object sender, DoWorkEventArgs e) {
_creatorTimer = new Timer(CreatorLoop, null, 0, 10);
// some other code that worker is doing while the timer is active
// ...
// ...
}
private void CreatorLoop(object state) {
// Stop timer (prevent reentering)
_creatorTimer.Change(Timeout.Infinite, 0);
/*
... Work here
*/
// Reenable timer
_creatorTimer.Change(10, 0);
}
MSDN afferma che il metodo di callback viene chiamato (ogni volta che il timer incendi) in thread separato dal pool di thread. Ciò significa che se interrompo il timer, la prima cosa nel metodo non impedisce necessariamente al timer di sparare ed eseguire un'altra istanza del metodo prima che il primo avesse la possibilità di fermare il timer.
Dovrebbe forse essere bloccato il timer (o anche il metodo non rientrante)? Qual è il modo giusto per evitare che il timer si attivi durante l'esecuzione del suo metodo di callback (e non rientranti)?
questa domanda può aiutarti http://stackoverflow.com/questions/1116249/manualresetevent-vs-thread-sleep – Kane