22 Kasım 2018 Perşembe

System.Timers.Timer Sınıfı

Giriş
Şu satır dahil edilir.
using System.Timers;
Bu sınıfın da Winforms Timer  gibi GUI'de kullanılmaya daha elverişli olduğu yazılmış. GUI kullanmıyorsak bu sınıf yerine  System.Threading.Timer kullanılabilir.

AutoReset Alanı
Bu sınıfının en dikkat gerektiren özelliği aşağıda:
If processing of the Elapsed event lasts longer than Interval, the event might be raised again on another ThreadPool thread. In this situation, the event handler should be reentrant.
Yani timer event handler yavaş ise handler işini bitirmeden bir kere daha çağırılabilir. Bu durumda AutoReset özelliği false yapılarak one-shot şekilde kullanmak gerekir.

Elapsed nesnesi System.Timers.ElapsedEventHandler tipindendir.
myTimer.AutoReset = false; // makes it fire only once
Elapsed Alanı
Elapsed handler içindeki exception'ları dışarı vermez.
The Timer component catches and suppresses all exceptions thrown by event handlers for the Elapsed event.
Şöyle yaparız.
myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
Handler şöyle olabilir.

void myTimer_Elapsed(object sender, EventArgs e)
{
  ...
}
Handler şöyle olabilir
void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e){
  ...
}
Handler içinde geçen süreye erişilebilir.
void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e){
  TimeSpan ts = sw.Elapsed;
  if (ts.TotalSeconds >= ...)
  {...}
  ...
}
Interval Alanı
Milisaniye cinsindendir. Şöyle yaparız.
myTimer.Interval = 1000;
Start metoduŞöyle yaparız.
myTimer.Start();
Stop metodu
Şöyle yaparız.
myTimer.Stop();
SyncronizingObject Alanı
Sınıfın SyncronizingObject özelliği Form yapılırsa Forms.Timer'ın aksine hem GUI'yi güncelleyebilir hem de GUI sleep etse timer kaymaz (drift etmez)

Eğer bu alana bakmadan GUI'ye erişmek için şöyle yapmak gerekir.
void timerElapsed(object source, ElapsedEventArgs e){
  if (InvokeRequired)
  {
    this.Invoke(new Action(() => { Hide(); }));
  }
  else
  {
    Hide();
  }
}

Hiç yorum yok:

Yorum Gönder