C# Language
timers
Sök…
Syntax
-
myTimer.Interval
- anger hur ofta händelsen "Tick" ska kallas (i millisekunder) -
myTimer.Enabled
- booleskt värde som ställer in timern för att vara aktiverad / inaktiverad -
myTimer.Start()
- Startar timern. -
myTimer.Stop()
- Stoppar timern.
Anmärkningar
Om du använder Visual Studio kan Timers läggas till som en kontroll direkt till din form från verktygslådan.
Multitrådade tidtagare
System.Threading.Timer
- Enklaste timer med flera System.Threading.Timer
. Innehåller två metoder och en konstruktör.
Exempel: En timer kallar DataWrite-metoden, som skriver "multithread exekverad ..." efter att fem sekunder har gått, och sedan varannan sekund därefter tills användaren trycker på 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..."
}
}
Obs: Skickar ett separat avsnitt för att bortskaffa flertrådiga tidtagare.
Change
- Den här metoden kan kallas när du vill ändra timerintervallet.
Timeout.Infinite
- Om du vill skjuta bara en gång. Ange detta i konstruktörens sista argument.
System.Timers
- En annan timerklass tillhandahållen av .NET Framework. Det System.Threading.Timer
.
Funktioner:
-
IComponent
- Tillåter att den placeras i Visual Studio's Designer's komponentfack -
Interval
istället för enChange
-
Elapsed
event
i stället för en återuppringningdelegate
-
Enabled
egenskap för att starta och stoppa timern (default value = false
) -
Start
&Stop
metoder om du blir förvirrad avEnabled
egenskap (ovan punkt) -
AutoReset
- för att indikera en återkommande händelse (default value = true
) -
SynchronizingObject
egenskapen medInvoke
ochBeginInvoke
metoder för säkert att ringa metoder på WPF-element och Windows Forms-kontroller
Exempel som representerar alla ovanstående funktioner:
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
- använd trådpoolen för att låta några trådar betjäna många tidtagare. Det betyder att återuppringningsmetod eller Elapsed
händelse kan utlösa på en annan tråd varje gång den kallas.
Elapsed
- den här händelsen startar alltid i tid - oavsett om den tidigare Elapsed
händelsen slutförde exekveringen. På grund av detta måste återuppringningar eller händelseshanterare vara trådsäkra. Noggrannheten för flertrådiga tidtagare beror på operativsystemet och är vanligtvis på 10–20 ms.
interop
- när du behöver större noggrannhet använder du detta och ring Windows multimediatimer. Detta har noggrannhet ner till 1 ms och det definieras i winmm.dll
.
timeBeginPeriod
- Ring detta först för att informera operativsystemet om att du behöver hög timingnoggrannhet
timeSetEvent
- ring detta efter timeBeginPeriod
att starta en multimediatimer.
timeKillEvent
- ring detta när du är klar, detta stoppar timern
timeEndPeriod
- Ring detta för att informera operativsystemet om att du inte längre behöver hög timingnoggrannhet.
Du kan hitta kompletta exempel på Internet som använder multimediatimer genom att söka efter nyckelorden dllimport
winmm.dll
timesetevent
.
Skapa en instans av en timer
Timrar används för att utföra uppgifter med specifika tidsintervall (Gör X varje Y sekunder) Nedan är ett exempel på att skapa en ny instans av en timer.
OBS : Detta gäller Timers som använder WinForms. Om du använder WPF, kanske du vill undersöka 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();
}
}
Tilldela händelseshanteraren "Tick" till en timer
Alla åtgärder som utförs i en timer hanteras i händelsen "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.
}
}
Exempel: Använd en timer för att utföra en enkel nedräkning.
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();
}
}
}
Resulterar i...
Och så vidare...