Wiem, że to brzmi głupio, ale próbowałem wszystkiego, aby zatrzymać stoper, ale timer się nie zatrzyma. Pracuję nad grą i byłbym wdzięczny, gdyby ktoś mógł mi powiedzieć, jak zatrzymać stoper.C# - jak zatrzymać stoper?
Odpowiedz
Jeśli używasz System.Timers.Timer
można zatrzymać tak
timer.Enabled = false
jeśli używasz System.Threading.Timer
, używać tego
timer.Change(Timeout.Infinite , Timeout.Infinite)
Albo użyć
timer.Stop();
jeśli używasz System.Windows.Forms.Timer
Zakładając, że korzystasz z System.Windows.Forms.Timer; ponieważ nie było wyraźnego odniesienia do czegokolwiek innego ... jeśli tak jest ...
System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
myTimer.Stop();
System.Windows.Forms.Timer: timer.Enabled = false;
System.Threading.Timer: timer.Change(Timeout.Infinite, Timeout.Infinite);
System.Timers.Timer: timer.Enabled = false;
lub timer.Stop();
z każdym z timerów w platformie .NET jest możliwe, że timer uruchamia się tuż przed jego zatrzymaniem, więc zobaczysz wywołanie zwrotne po jego zatrzymaniu.
Musisz użyć czegoś jak asynchronous callback context: użyj bool
zestaw do true
kiedy chcesz bieg zegara i ustawić go na false
kiedy go zatrzymać. Następnie sprawdź swój kontekst, aby sprawdzić, czy naprawdę powinien działać, czy nie.
Cieszę się, że znalazłem tu również tę informację. Używam, zamiast dodatkowej zmiennej, sprawdzanie, czy timer jest nadal włączony w oddzwanianiu timera. – Fanda
Zależy od licznika czasu. Jeśli pochodzi z wątku przestrzeni nazw, pozbądź się go i odtwórz go, gdy zajdzie taka potrzeba, lub poproś, by timer wstrzymał się z decyzją o zresetowaniu (zobacz msdn). Przestrzeń nazw System.Timers ma metodę uruchamiania i zatrzymywania.
Tak, aby dodać do poprzednich odpowiedzi, w przypadku korzystania z klasy System.Threading.Timer, będzie go zatrzymać na stałe bez dalszych szansę wykorzystać tę samą instancję:
timer.Dispose()
inaczej:
timer.Change(Timeout.Infinite, Timeout.Infinite)
opublikować kod na dobry początek. – Pabuc
Pokaż nam kod – Kimtho6
Które z klas timerów? Są 4, które znam, tylko w BCL. – Oded