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 metodoChange
-
event
Elapsed
anziché undelegate
richiamata - Proprietà
Enabled
per avviare e arrestare il timer (default value = false
) -
Start
eStop
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 metodiInvoke
eBeginInvoke
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 ...
E così via...