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 metody Change
  • Elapsed event zamiast delegate 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 metodami Invoke i BeginInvoke 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...

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

I tak dalej...



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow