Timery

aleksjej

Timery w C#

Są dwa sposoby na tworzenie timerów w C#. Pierwszy z nich to oczywiście użycie możliwości IDE takiego jak VS2005. Opisze tu jednak także ręczny sposób bo na pewno warto znać obie metody.

1) Użycie Visual Studio 2005

  1. Będąc w trybie projektowania formatki rozwijamy Toolbox
  2. Odnajdujemy "Timer" i przeciągamy na naszą formatkę. Na dole powinna pokazać się ikonka nazwana timer1
  3. Zaznaczając w/w ikonke możemy w panelu Properties zdefiniować podstawowe właściwości timera takie jak Interval (w ms) oraz standardowo Name (nazwa obiektu).
  4. Aby zdefiniować metodę która ma się wykonywać wraz z zajściem zdarzenia timer1.Tick tradycyjnie dwókrotnie klikamy na ikonke reprezentującą nasz timer. Środowisko powinno wygenerować coś takiego :
        private void timer1_Tick(object sender, EventArgs e)
        {
        //Zrob cos...
        }

Tak otrzymany Timer mozemy obslugiwac wywolując na obiektcie timer1 metode Start() lub Stop().

1) Ręczne ustawianie timerów

Oto przyklad programu, który co 1000 ms wypisuje " . " na konsole :

using System;
using System.Collections.Generic;
using System.Text;
using System.Timers;

namespace HelloTimer
{
    class Program
    {
        static void Main(string[] args) { new Program(); }

        public Program() {

            odmierzacz = new Timer(); //Tworzenie obiektu
            odmierzacz.Interval = 1000; //Ustawienie przerywania na 1000ms (1s)
            odmierzacz.Elapsed += new ElapsedEventHandler(this.wykonujMnieCoJakisCzas); //Przypisanie metody
            odmierzacz.Start(); //Start timera
            Console.ReadKey();
        }
        private void wykonujMnieCoJakisCzas(object sender, EventArgs e) {

         Console.Write(" . "); //Wypisujemy kropke na ekran co 1s :)   
        }

        private Timer odmierzacz;  //Deklaracja timera
    }
}

Uwagi koncowe

Warto zwrócić uwagę, że w w/w przypadkach mamy do czynienia z dwoma różnymi klasami. VS2005 generuje nam obiekt typu System.Windows.Forms.Timer a w drugim przypadku do czynienia mamy z System.Timers.Timer.

Główną różnicą jest chyba różne nazewnictwo Eventów : "Tick" w pierwszym przypadku, "Elapsed" w drugim...

3 komentarzy

Wersja poprawna

using System;
using System.Collections.Generic;
using System.Text;
using System.Timers;

namespace HelloTimer
{
    class Program
    {
        static void Main(string[] args) { new Program(); }

        public Program()
        {

            odmierzacz = new System.Timers.Timer(); //Tworzenie obiektu
            odmierzacz.Interval = 1000; //Ustawienie przerywania na 1000ms (1s)
            odmierzacz.Elapsed += new System.Timers.ElapsedEventHandler(this.wykonujMnieCoJakisCzas); //Przypisanie metody
            odmierzacz.Start(); //Start timera
            Console.ReadKey();
        }
        private void wykonujMnieCoJakisCzas(object sender, EventArgs e)
        {

            Console.Write(" . "); //Wypisujemy kropke na ekran co 1s :)   
        }

        private System.Timers.Timer odmierzacz;  //Deklaracja timera
    }
}

Hehe jasne, pewnie masz racje :) niestety nie próbowałem sie doszukać na czym polega różnica miedzy tymi obiektami - pewnie "foremkowa" dziedziczy z system.timers ale glowy nie dam. Dzieki za komentarz, to moj pierwszy art. i mam nadzieje nie ostatni. Pozdrawiam

Fajnie, przydatne, ale o tej delegacji mógłbyś więcej napisać, bo komentarz "przypisanie metody" to troche za mało. No i chyba nie na nazwie zdarzeń polega różnica między tymi obiektami :P