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ść
Intervalzamiast metodyChange -
Elapsedeventzamiastdelegatewywołania zwrotnego -
Enabledwłaściwość do uruchamiania i zatrzymywania stopera (default value = false) - Metody
Start&Stopw przypadku, gdy zostaniesz zdezorientowany przez właściwośćEnabled(powyżej punktu) -
AutoReset- do wskazywania zdarzenia cyklicznego (default value = true) -
SynchronizingObjectz metodamiInvokeiBeginInvokedo 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...

