22 Kasım 2018 Perşembe

System.Threading.Timer Sınıfı

Giriş
Bu timer background işler için tercih edilir.

Constructor - Lambda
4 parametre alır. İlk parametre callback, ikincisi callback'e geçilecek nesne, üçüncüsü geciktirme (delay) süresi, dördüncüsü ise aralık (interval) süresi. Interval süresi Timeout.Infinite verilebilir.

Örnek
Periyodik timer için şöyle yaparız.
var timer = new Timer(s => { ... },null, 1000, 1000);
Örnek
Singleshot timer için şöyle yaparız.
var timeMS = 1000;
var timer = new Timer(_ => Console.WriteLine("Peekaboo"), null, timeMS, Timeout.Infinite);
Console.ReadKey();
Constructor - TimerCallback
Şöyle yaparız.
public void MyCallback (object obj)
{
  int x = (int)obj;
  ...
}
TimerCallback callback = new TimerCallback (MyCallback);
int num = 0; 
Timer timer = new Timer (callback, num, 0, 2000);//4-th number is interval in ms
Şöyle yaparız.
public void MyCallback(object o) { ... }
int timeToStart = 1000;
int period = 2000;

//fire the delegate after 1 second, and every 2 seconds from then on
Timer timer = new Timer(MyCallback, null, timeToStart, period);
Change metodu
Şöyle yaparız.
//pause
timer.Change (Timeout.Infinite, Timeout.Infinite);
Şöyle yaparız.
int timeToStart = 1000;
int period = 2000;

//resume
timer.Change (timeToStart, period);
Diğer Notlar

Timer içinde GUI'ye erişmek
Bu sınıf arka plandaki işler için tercih edilse bile GUI'ye erişmek için kullanılabilir. Şöyle yaparız.
var context = SynchronizationContext.Current;
var tm = new System.Threading.Timer(state => 
{
  context.Send(delegate() { statusDateTimeLabel.Text = ... });
}, null, TimeSpan.FromMilliseconds(0), TimeSpan.FromMilliseconds(1000));


Hiç yorum yok:

Yorum Gönder