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 en Change
  • Elapsed event i stället för en återuppringning delegate
  • Enabled egenskap för att starta och stoppa timern ( default value = false )
  • Start & Stop metoder om du blir förvirrad av Enabled egenskap (ovan punkt)
  • AutoReset - för att indikera en återkommande händelse ( default value = true )
  • SynchronizingObject egenskapen med Invoke och BeginInvoke 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...

ange bildbeskrivning här ange bildbeskrivning här

Och så vidare...



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow