Suche…


Syntax

  • myTimer.Interval - myTimer.Interval wie oft das "Tick" myTimer.Interval (in Millisekunden) aufgerufen wird
  • myTimer.Enabled - boolescher Wert, mit dem der Timer aktiviert / deaktiviert wird
  • myTimer.Start() - Startet den Timer.
  • myTimer.Stop() - Stoppt den Timer.

Bemerkungen

Bei Verwendung von Visual Studio können Timer aus der Toolbox direkt als Steuerelement Ihrem Formular hinzugefügt werden.

Multithread-Timer

System.Threading.Timer - Einfachster Multithread-Timer. Enthält zwei Methoden und einen Konstruktor.

Beispiel: Ein Timer ruft die DataWrite-Methode auf, die nach Ablauf von fünf Sekunden "Multithread ausgeführt ..." schreibt, und danach jede Sekunde, bis der Benutzer die Eingabetaste drückt:

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..."
  }
}

Hinweis: Wird einen separaten Abschnitt zum Entsorgen von Multithread-Timern bereitstellen.

Change - Diese Methode kann aufgerufen werden, wenn Sie das Timerintervall ändern möchten.

Timeout.Infinite - Wenn Sie nur einmal feuern möchten. Geben Sie dies im letzten Argument des Konstruktors an.

System.Timers - Eine andere von .NET Framework bereitgestellte System.Timers . Es System.Threading.Timer den System.Threading.Timer .

Eigenschaften:

  • IComponent - Ermöglicht das IComponent in der Komponentenleiste des Designer von Visual Studio
  • Interval statt einer Change Methode
  • Elapsed event statt eines Callback - delegate
  • Enabled Eigenschaft zum Starten und Stoppen des Timers ( default value = false )
  • Start & Stop Methoden für den Fall, dass Sie durch die Enabled Eigenschaft (über Punkt) verwirrt werden
  • AutoReset - zum Anzeigen eines wiederkehrenden Ereignisses ( default value = true )
  • SynchronizingObject Eigenschaft mit Invoke und BeginInvoke Methoden für die sichere Methoden auf WPF - Elemente aufrufen und Windows Forms - Steuerelemente

Beispiel für alle oben genannten Funktionen:

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 - Verwenden Sie den Thread-Pool, um einigen Threads zu ermöglichen, viele Timer zu bedienen. Das bedeutet, dass die Callback-Methode oder das Elapsed Ereignis bei jedem Aufruf eines anderen Threads ausgelöst werden kann.

Elapsed - Dieses Ereignis wird immer rechtzeitig Elapsed - unabhängig davon, ob die Ausführung des vorherigen Elapsed Ereignisses abgeschlossen ist. Aus diesem Grund müssen Rückrufe oder Ereignishandler threadsicher sein. Die Genauigkeit von Multithread-Timern hängt vom Betriebssystem ab und beträgt normalerweise 10–20 ms.

interop - Wenn Sie eine höhere Genauigkeit benötigen, verwenden Sie diese interop und rufen Sie den Windows-Multimedia-Timer auf. Dies hat eine Genauigkeit von bis zu 1 ms und ist in winmm.dll definiert.

timeBeginPeriod - Rufen Sie diese timeBeginPeriod zuerst auf, um das Betriebssystem darüber zu informieren, dass Sie eine hohe Timing-Genauigkeit benötigen

timeSetEvent - Rufen Sie nach timeBeginPeriod diese timeBeginPeriod auf, um einen Multimedia-Timer zu starten.

timeKillEvent - rufe dies auf, wenn du fertig bist, und der Timer wird timeKillEvent

timeEndPeriod - Rufen Sie dies auf, um das Betriebssystem darüber zu informieren, dass Sie keine hohe Timing-Genauigkeit mehr benötigen.

Sie finden vollständige Beispiele im Internet, die den Multimedia-Timer verwenden, indem Sie nach den Schlüsselwörtern dllimport winmm.dll timesetevent .

Instanz eines Timers erstellen

Zeitgeber werden verwendet, um Aufgaben in bestimmten Zeitabständen auszuführen (Do X alle Y Sekunden). Nachfolgend ein Beispiel zum Erstellen einer neuen Instanz eines Zeitgebers.

HINWEIS : Dies gilt für Zeitgeber, die WinForms verwenden. Wenn Sie WPF verwenden, möchten Sie vielleicht einen Blick auf DispatcherTimer werfen

    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();
        }

    }

Zuweisen des "Tick" -Ereignishandlers zu einem Timer

Alle Aktionen, die in einem Timer ausgeführt werden, werden im Ereignis "Tick" behandelt.

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.
    }
}

Beispiel: Einen Timer verwenden, um einen einfachen Countdown auszuführen.

    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();
            }
        }
    }

Ergebnisse in ...

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Und so weiter...



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow