2012-07-02 17 views

Odpowiedz

69

Użyj licznika czasu. Istnieją 3 podstawowe rodzaje, z których każdy nadaje się do różnych celów.

Stosować wyłącznie w aplikacji Windows Form. Ten licznik czasu jest przetwarzany jako część pętli komunikatów, więc czasomierz może zostać zatrzymany pod dużym obciążeniem.

Kiedy trzeba synchroniczności, użyj tego. Oznacza to, że zdarzenie tick zostanie uruchomione na wątku, który uruchomił timer, umożliwiając wykonywanie operacji GUI bez większego wysiłku.

Jest to najbardziej dużej mocy czasowy, który wyzwala kleszczy wątku tła. Umożliwia to wykonywanie operacji w tle bez konieczności zamrażania GUI lub głównego wątku.

W większości przypadków polecam System.Timers.Timer.

+4

Po prostu dodatek - w rzeczywistości jest coś więcej niż tylko to - na przykład istnieje "DispatcherTimer" (WPF/Silverlight), a także inne narzędzia podobne do timerów. –

+4

Należy również pamiętać, że wydarzenie, które upłynęło w System.Timers.Timer, jest uruchamiane w wątku interfejsu użytkownika, jeśli ustawiono obiekt SynchronizingObject, w przeciwnym razie zostanie wywołany w wątku ThreadPool. –

+0

Należy zwrócić uwagę, że jeśli chcesz uzyskać niezawodność, żadna z nich nie działa w 100%, szczególnie w systemach o dużym obciążeniu. –

11

Użyj timer. Należy pamiętać, że .NET ma wiele różnych timerów. This article obejmuje różnice.

+0

MSDN Magazine link jest martwy. –

+0

Dzięki. Link zaktualizowany. –

36

Dla tego System.Timers.Timer działa najlepiej

// Create a timer 
myTimer = new System.Timers.Timer(); 
// Tell the timer what to do when it elapses 
myTimer.Elapsed += new ElapsedEventHandler(myEvent); 
// Set it to go off every five seconds 
myTimer.Interval = 5000; 
// And start it   
myTimer.Enabled = true; 

// Implement a call with the right signature for events going off 
private void myEvent(object source, ElapsedEventArgs e) { } 

Zobacz Timer Class (.NET 4.6 and 4.5) szczegółowe informacje

+3

Z myślą o poszukiwaczach szukających szybkiej kopii i wklejenia użyłem przykładu @IvoTops i stworzyłem przykładowy tutaj -> https://gist.github.com/HockeyJustin/1161699bd26adb5c054d. – HockeyJ

Powiązane problemy