Ricerca…


Sintassi

  • myTimer.Interval - imposta la frequenza con cui viene chiamato l'evento "Tick" (in millisecondi)
  • myTimer.Enabled - valore booleano che imposta il timer su abilitato / disabilitato
  • myTimer.Start() - Avvia il timer.
  • myTimer.Stop() - Ferma il timer.

Osservazioni

Se si utilizza Visual Studio, i timer possono essere aggiunti come controllo direttamente al modulo dalla casella degli strumenti.

Timer multithread

System.Threading.Timer - Timer multithreading più semplice. Contiene due metodi e un costruttore.

Esempio: un timer chiama il metodo DataWrite, che scrive "multithread eseguito ..." dopo che sono trascorsi cinque secondi, e quindi ogni secondo dopo che l'utente preme Invio:

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

Nota: pubblicherà una sezione separata per lo smaltimento dei timer multithread.

Change : questo metodo può essere chiamato quando si desidera modificare l'intervallo del timer.

Timeout.Infinite - Se vuoi sparare solo una volta. Specificare questo nell'ultimo argomento del costruttore.

System.Timers - Un'altra classe di timer fornita da .NET Framework. Termina System.Threading.Timer .

Caratteristiche:

  • IComponent : consente di posizionarlo nella barra dei componenti del Designer di Visual Studio
  • Proprietà Interval invece di un metodo Change
  • event Elapsed anziché un delegate richiamata
  • Proprietà Enabled per avviare e arrestare il timer ( default value = false )
  • Start e Stop metodi nel caso in cui ti venga confusa la proprietà Enabled (punto precedente)
  • AutoReset - per indicare un evento ricorrente ( default value = true )
  • Proprietà SynchronizingObject con i metodi Invoke e BeginInvoke per chiamare in sicurezza i metodi su elementi WPF e controlli Windows Form

Esempio che rappresenta tutte le caratteristiche di cui sopra:

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 : utilizzare il pool di thread per consentire a pochi thread di servire molti timer. Significa che il metodo di callback o l'evento Elapsed può attivarsi su un thread diverso ogni volta che viene chiamato.

Elapsed : questo evento si attiva sempre in tempo, indipendentemente dal fatto che l'evento Elapsed precedente abbia completato l'esecuzione. Per questo motivo, callback o gestori di eventi devono essere thread-safe. La precisione dei timer multithread dipende dal sistema operativo ed è in genere compresa tra 10 e 20 ms.

interop - quando hai bisogno di maggiore precisione, usa questo e chiama il timer multimediale di Windows. Questo ha una precisione fino a 1 ms ed è definito in winmm.dll .

timeBeginPeriod : chiamate prima questo per informare il sistema operativo che è necessaria un'accuratezza dei tempi elevata

timeSetEvent - chiama questo dopo il timeBeginPeriod di timeBeginPeriod per avviare un timer multimediale.

timeKillEvent : chiama questo quando hai finito, questo arresta il timer

timeEndPeriod - Chiama questo per informare l'OS che non hai più bisogno di un'accuratezza dei tempi elevata.

Puoi trovare esempi completi su Internet che utilizzano il timer multimediale cercando le parole chiave dllimport winmm.dll timesetevent .

Creazione di un'istanza di un timer

I timer sono utilizzati per eseguire attività a intervalli di tempo specifici (Do X ogni Y secondi) Di seguito è riportato un esempio di creazione di una nuova istanza di un Timer.

NOTA : questo vale per i timer che utilizzano WinForms. Se si utilizza WPF, è possibile esaminare 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();
        }

    }

Assegnazione del gestore di eventi "Tick" a un Timer

Tutte le azioni eseguite in un timer vengono gestite nell'evento "Tick".

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

Esempio: utilizzo di un timer per eseguire un semplice conto alla rovescia.

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

Risultati in ...

inserisci la descrizione dell'immagine qui inserisci la descrizione dell'immagine qui

E così via...



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow