C# Language
Timery
Szukaj…
Składnia
-
myTimer.Interval
- ustawia częstotliwość wywoływania zdarzenia „Tick” (w milisekundach) -
myTimer.Enabled
- wartość logiczna, która ustawia włączenie / wyłączenie timera -
myTimer.Start()
- Uruchamia stoper. -
myTimer.Stop()
- Zatrzymuje stoper.
Uwagi
Jeśli używasz Visual Studio, Timery można dodać jako formant bezpośrednio do formularza z przybornika.
Timery wielowątkowe
System.Threading.Timer
- Najprostszy wielowątkowy zegar. Zawiera dwie metody i jednego konstruktora.
Przykład: Timer wywołuje metodę DataWrite, która zapisuje „wykonywany wielowątkowo ...” po pięciu sekundach, a następnie co sekundę, dopóki użytkownik nie naciśnie Enter:
using System;
using System.Threading;
class Program
{
static void Main()
{
// First interval = 5000ms; subsequent intervals = 1000ms
Timer timer = new Timer (DataWrite, "multithread executed...", 5000, 1000);
Console.ReadLine();
timer.Dispose(); // This both stops the timer and cleans up.
}
static void DataWrite (object data)
{
// This runs on a pooled thread
Console.WriteLine (data); // Writes "multithread executed..."
}
}
Uwaga: opublikuje osobną sekcję dotyczącą usuwania liczników wielowątkowych.
Change
- tę metodę można wywołać, gdy chcesz zmienić interwał timera.
Timeout.Infinite
- Jeśli chcesz strzelić tylko raz. Określ to w ostatnim argumencie konstruktora.
System.Timers
- kolejna klasa timerów dostarczona przez .NET Framework. Otacza System.Threading.Timer
.
Cechy:
-
IComponent
- Umożliwienie umieszczenia go w zasobniku komponentów Projektanta programu Visual Studio - Właściwość
Interval
zamiast metodyChange
-
Elapsed
event
zamiastdelegate
wywołania zwrotnego -
Enabled
właściwość do uruchamiania i zatrzymywania stopera (default value = false
) - Metody
Start
&Stop
w przypadku, gdy zostaniesz zdezorientowany przez właściwośćEnabled
(powyżej punktu) -
AutoReset
- do wskazywania zdarzenia cyklicznego (default value = true
) -
SynchronizingObject
z metodamiInvoke
iBeginInvoke
do bezpiecznego wywoływania metod w elementach WPF i kontrolkach Windows Forms
Przykład reprezentujący wszystkie powyższe funkcje:
using System;
using System.Timers; // Timers namespace rather than Threading
class SystemTimer
{
static void Main()
{
Timer timer = new Timer(); // Doesn't require any args
timer.Interval = 500;
timer.Elapsed += timer_Elapsed; // Uses an event instead of a delegate
timer.Start(); // Start the timer
Console.ReadLine();
timer.Stop(); // Stop the timer
Console.ReadLine();
timer.Start(); // Restart the timer
Console.ReadLine();
timer.Dispose(); // Permanently stop the timer
}
static void timer_Elapsed(object sender, EventArgs e)
{
Console.WriteLine ("Tick");
}
}
Multithreaded timers
- użyj puli wątków, aby umożliwić kilku wątkom obsługę wielu liczników. Oznacza to, że metoda wywołania zwrotnego lub zdarzenie Elapsed
może wyzwalać inny wątek przy każdym wywołaniu.
Elapsed
- to zdarzenie zawsze uruchamia się na czas - niezależnie od tego, czy poprzednie Elapsed
zdarzenie zakończyło się. Z tego powodu wywołania zwrotne lub procedury obsługi zdarzeń muszą być bezpieczne dla wątków. Dokładność liczników wielowątkowych zależy od systemu operacyjnego i zwykle wynosi 10–20 ms.
interop
- kiedy potrzebujesz większej dokładności, użyj tego i zadzwoń do timera multimedialnego Windows. Ma dokładność do 1 ms i jest zdefiniowany w winmm.dll
.
timeBeginPeriod
- Zadzwoń najpierw, aby poinformować system operacyjny, że potrzebujesz wysokiej dokładności pomiaru czasu
timeSetEvent
- wywołaj to po timeBeginPeriod
aby uruchomić minutnik multimedialny.
timeKillEvent
- wywołaj to, gdy skończysz, to zatrzyma stoper
timeEndPeriod
- Zadzwoń, aby poinformować system operacyjny, że nie potrzebujesz już wysokiej dokładności pomiaru czasu.
Możesz znaleźć kompletne przykłady w Internecie, które używają minutnika multimedialnego, wyszukując słowa kluczowe dllimport
winmm.dll
timesetevent
.
Tworzenie wystąpienia timera
Timery służą do wykonywania zadań w określonych odstępach czasu (wykonaj X co Y sekund). Poniżej znajduje się przykład tworzenia nowej instancji Timera.
UWAGA : Dotyczy to Timerów korzystających z WinForm. Jeśli używasz WPF, możesz zajrzeć do DispatcherTimer
using System.Windows.Forms; //Timers use the Windows.Forms namespace
public partial class Form1 : Form
{
Timer myTimer = new Timer(); //create an instance of Timer named myTimer
public Form1()
{
InitializeComponent();
}
}
Przypisywanie modułu obsługi zdarzeń „Zaznacz” do timera
Wszystkie czynności wykonywane w zegarze są obsługiwane w zdarzeniu „Zaznacz”.
public partial class Form1 : Form
{
Timer myTimer = new Timer();
public Form1()
{
InitializeComponent();
myTimer.Tick += myTimer_Tick; //assign the event handler named "myTimer_Tick"
}
private void myTimer_Tick(object sender, EventArgs e)
{
// Perform your actions here.
}
}
Przykład: użycie timera do wykonania prostego odliczania.
public partial class Form1 : Form
{
Timer myTimer = new Timer();
int timeLeft = 10;
public Form1()
{
InitializeComponent();
//set properties for the Timer
myTimer.Interval = 1000;
myTimer.Enabled = true;
//Set the event handler for the timer, named "myTimer_Tick"
myTimer.Tick += myTimer_Tick;
//Start the timer as soon as the form is loaded
myTimer.Start();
//Show the time set in the "timeLeft" variable
lblCountDown.Text = timeLeft.ToString();
}
private void myTimer_Tick(object sender, EventArgs e)
{
//perform these actions at the interval set in the properties.
lblCountDown.Text = timeLeft.ToString();
timeLeft -= 1;
if (timeLeft < 0)
{
myTimer.Stop();
}
}
}
Prowadzi do...
I tak dalej...