Comment puis-je modifier l'intervalle de temps dans le Système.Le filetage.Minuterie de la fonction de rappel de ce timer?
Comment puis-je changer l'intervalle de temps dans le Système.Le filetage.Minuterie de la fonction de rappel de ce timer?
Est-ce correct?
Le faire. Ne pas arriver.
public class TestTimer
{
private static Timer _timer = new Timer(TimerCallBack);
public void Run()
{
_timer.Change(TimeSpan.Zero, TimeSpan.FromMinutes(1));
}
private static void TimerCallBack(object obj)
{
if(true)
_timer.Change(TimeSpan.Zero, TimeSpan.FromMinutes(10));
}
}
si(vrai) ??? .........
Le blé, qui est valide pour une bonne raison, les tests, par exemple ?
Mitch, c'est juste un exemple. Ne le prenez pas à cœur. lol
plus 1 tout simplement parce que vous en avez besoin
Le blé, qui est valide pour une bonne raison, les tests, par exemple ?
Mitch, c'est juste un exemple. Ne le prenez pas à cœur. lol
plus 1 tout simplement parce que vous en avez besoin
OriginalL'auteur mrbrooks | 2011-05-25
Vous devez vous connecter pour publier un commentaire.
Cette ligne génèrent une récursion infinie:
Le premier paramètre forces
TimerCallBack
à exécuter immédiatement. Donc, il l'exécute, encore et encore, indéfiniment.La solution serait
OriginalL'auteur Alex Aza
Le problème, c'est que votre appel à
Change
spécifie que le prochaine appel devrait arriver immédiatement. Si vous allez appelerChange
chaque temps, vous pouvez simplement utiliser une période deDélai d'attente.Infini
(qui est une constante égale à -1) pour lui dire d'éviter de répéter à tout bout la prochaine fois - mais il sera toujours continuer à tirer, parce que la prochaine fois, vous le réinitialiser. Par exemple:Alternativement, vous pouvez changer qu'une seule fois, puis de le laisser:
Notez que rien n'est à l'aide de l'intervalle initial (1 seconde dans les exemples ci-dessus) dans les deux cas, parce que nous allons appeler
Change
immédiatement - si vous voulez vraiment un autre temps avant le premier appel, ne pas utiliser deTimeSpan.Zero
dans l'appel initial àChange
.Timeout.Infinite
, qui, je pense, montre plus clairement l'intention. 😉Véritable modifier. (Bien que si
Timeout.Infinite
ont été unTimeSpan
qu'il serait plus clair - les docs pourTimer.Change(int,int)
mentionTimeout.Infinite
; les docs pourTimer.Change(TimeSpan, TimeSpaan)
ne pas 🙁Ouais, obtenu à l'amour de la cohérence là, lol. 😉 Pas du tout surpris vraiment, viennent à s'attendre à ce, le long de avec d'autres inutiles info doc.
Pour une valeur infinie dans
Timer.Change(TimeSpan, TimeSpan)
laTimeout.InfiniteTimeSpan
champ peut être utilisé.OriginalL'auteur Jon Skeet