C# timer nedir, C#’da bazı işlemlerimizi belirleyeceğimiz zaman aralığında tekrarlaması için kullanabileceğimiz Timer sınıfını detaylı olarak ele alıyor olacağız.
C# Timer Nedir, Örnekli Nasıl Kullanılır?
C#’da proje türüne göre kullanabileceğimiz farklı namespace’ler altında Timer nesneleri mevcut. Proje türünüze göre ilgili Timer sınıfını kullanmalısınız.
Tüm .Net Proje Türleri İçin Kullanabileceğiniz Timer
Tüm .Net proje türlerinde kullanabileceğiniz Timer System.Timers namespace’i altında yer alıyor ve örnek kullanımı ise şu şekildedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | using System; using System.Timers; namespace ConsoleApp1 { class Program { public static void Main() { var timer = new Timer(1000); timer.Elapsed += (sender, e) => Console.WriteLine(RandomNumber(6)); timer.Start(); Console.Read(); } public static string RandomNumber(int size) { var random = new Random(); var result = String.Empty; for (int i = 0; i < size; i++) { result += random.Next(0, 10); } return result; } } } |
Üstteki kodu açıklamak gerekirse şöyle özetleyebiliriz;
- 10-12.satırlar’da yer alan Timer sınıfımıza ait kullanım örneğini görüyorsunuz. Sadece 3 satırda Timer nesnesini oluşturduk ve constructor’da 1000ms(1sn)’de bir çalışmasını istediğimizi belirttik.
- timer.Start() metodunu kullanarak Timer’ın 1sn’de bir çalışmasını sağladık.
Windows Forms İçin Timer
Windows Forms uygulaması geliştiriyorsanız System.Windows.Forms namespace’i altında yer alan Timer’ı kullanmanız önem arz ediyor. Peki neden önemli? Eğer Windows Forms projesi geliştiriyorsanız System.Timer altındaki Timer’ı kullanırsanız UI elementlerine erişim ihtiyacınız olursa bu elementlere erişimde sıkıntı yaşarsınız. System.Windows.Forms.Timer sınıfı UI thread altında çalıştığı için windows forms elementlerine erişimde ve üzerinde işlem yapmada sıkıntı yaşamazsınız.
Örnek bir Windows Forms timer kullanımına bakalım hemen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | using System; using System.Windows.Forms; namespace WinFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { var timer = new Timer { Interval = 1000 }; timer.Tick += Timer_Tick; timer.Start(); } private void Timer_Tick(object sender, EventArgs e) { Console.WriteLine(RandomNumber(6)); } public static string RandomNumber(int size) { var random = new Random(); var result = String.Empty; for (int i = 0; i < size; i++) { result += random.Next(0, 10); } return result; } } } |
Yine üstteki kodumuzu şöyle özetleyebiliriz;
- 15-20.satırlarda Windows.Forms.Timer sınıfına ait kodları görüyorsunuz.
- System.Timers.Timer sınıfında olduğu gibi constructor’da ne kadar sürede bir çalışmasını istediğimiz değeri veremiyoruz. Onun yerine object initializer denilen Timer nesnesinden örnek aldığımzda Interval adındaki property’e 1000ms(1sn) tanımlamasını yapıyoruz.
- Yine System.Timers.Timer sınıfında çalışmasını istediğimiz metodu Elapsed event’inde değilde Tick adındaki event’i kullanarak çalışacak metodumuzu tanımlıyoruz.
📚 C# Timer Kaynakları
📚 C# Timer Benzeri Makaleler
- C# random number / rastgele sayı üretme nasıl yapılır?
- C# Switch Case Nedir, Örnekli Nasıl Kullanılır?
✍ Lütfen olumlu-olumsuz tüm görüşlerinizi bana yorum yada mail yolu ile iletmeyi ihmal etmeyin.
🔗 Sosyal medya kanallarından makaleyi paylaşarak destek olursanız çok sevinirim.
👋 Bir sonraki makalede görüşmek dileğiyle.
Hocam Merhaba bir alarm programın var birden çok alarm kurup çalıştırdığımda alarm en son sıradaki alarmın zamanı gelince çalıyor 1. sıradaki alarmı pas geçiyor bir türlü yapamadın ne yapmam gerekiyor acaba
timer.Elapsed += (sender, e) => j++;
anladığım kadarıyla elapsed adım oluyo ben bu adımda j değerini her saniyede artırdım fakat 10 olduğunda tekrar 0 olması lazım elapsed dışında
timer.Elapsed += (sender, e) => j++;
if(j == 10)
{
j = 0;
}
bunu yazdığım zaman çalışmıyor
yada
timer.Elapsed += (sender, e) => if(sorgu);
yaptığım zamanda nasıl yapabilirim
Merhaba,
Kodunuzu alttaki gibi değiştirip dener misiniz?
timer.Elapsed += (sender, e) {
j++;
if(j == 10)
{
j = 0;
}
}