Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET, çok iş parçacıklı bir ortamda kullanılmak üzere üç farklı zamanlayıcı sunar:
- System.Threading.Timer, bir iş parçacığında düzenli aralıklarla tek bir ThreadPool geri çağırma yöntemi yürütür.
- System.Timers.Timer, varsayılan olarak bir ThreadPool iş parçacığında düzenli aralıklarla bir olay tetikler.
- System.Threading.PeriodicTimer, zamanlayıcının tek tek işaretlerini bekledikten sonra çağıranın iş gerçekleştirmesini sağlar.
Uyarı
Bazı .NET uygulamaları ek zamanlayıcılar içerebilir:
- System.Windows.Forms.Timer: Bir olayı düzenli aralıklarla tetikleyen bir Windows Forms bileşeni. Bileşen, bir kullanıcı arabirimine sahip değildir ve tek iş parçacıklı bir ortamda kullanılmak üzere tasarlanmıştır.
- System.Web.UI.Timer: zaman uyumsuz veya zaman uyumlu web sayfası geri gönderme işlemlerini düzenli aralıklarla gerçekleştiren bir ASP.NET bileşeni.
- System.Windows.Threading.DispatcherTimer: belirli bir zaman aralığında ve belirtilen bir önceliğe göre işlenen kuyruğa entegre edilmiş bir Dispatcher zamanlayıcı.
System.Threading.Timer sınıfı
sınıfı, System.Threading.Timer belirtilen zaman aralıklarında sürekli olarak bir temsilci çağırmanızı sağlar. Bu sınıfı, belirli bir zaman aralığında bir temsilciye tek bir çağrı zamanlamak için de kullanabilirsiniz. Temsilci bir ThreadPool thread'de yürütülür.
Bir System.Threading.Timer nesne oluşturduğunuzda, geri çağırma yöntemini tanımlayan bir TimerCallback temsilci, geri çağırmaya geçirilen isteğe bağlı bir durum nesnesi, geri çağırmanın ilk çağrılmadan önce geciktirilmesi gereken süre ve geri çağırmalar arasındaki zaman aralığını belirtirsiniz. Bekleyen bir zamanlayıcıyı iptal etmek için Timer.Dispose yöntemini çağırın.
Aşağıdaki örnek, sağlanan temsilciyi bir saniye (1000 milisaniye) sonra ilk kez çağıran ve ardından iki saniyede bir çağıran bir zamanlayıcı oluşturur. Örnekteki durum nesnesi, temsilcinin kaç kez çağrıldığını saymak için kullanılır. Temsilci en az 10 kez çağrıldığında zamanlayıcı durdurulur.
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
private static Timer timer;
static void Main(string[] args)
{
var timerState = new TimerState { Counter = 0 };
timer = new Timer(
callback: new TimerCallback(TimerTask),
state: timerState,
dueTime: 1000,
period: 2000);
while (timerState.Counter <= 10)
{
Task.Delay(1000).Wait();
}
timer.Dispose();
Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: done.");
}
private static void TimerTask(object timerState)
{
Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: starting a new callback.");
var state = timerState as TimerState;
Interlocked.Increment(ref state.Counter);
}
class TimerState
{
public int Counter;
}
}
Imports System.Threading
Module Program
Private Timer As Timer
Sub Main(args As String())
Dim StateObj As New TimerState
StateObj.Counter = 0
Timer = New Timer(New TimerCallback(AddressOf TimerTask), StateObj, 1000, 2000)
While StateObj.Counter <= 10
Task.Delay(1000).Wait()
End While
Timer.Dispose()
Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: done.")
End Sub
Private Sub TimerTask(ByVal StateObj As Object)
Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: starting a new callback.")
Dim State As TimerState = CType(StateObj, TimerState)
Interlocked.Increment(State.Counter)
End Sub
Private Class TimerState
Public Counter As Integer
End Class
End Module
Daha fazla bilgi ve örnek için bkz System.Threading.Timer. .
System.Timers.Timer sınıfı
Çok iş parçacıklı bir ortamda kullanılabilecek başka bir zamanlayıcı, System.Timers.Timer varsayılan olarak bir iş parçacığında ThreadPool bir olay tetikler.
Bir System.Timers.Timer nesne oluşturduğunuzda, bir olayın tetiklendiği Elapsed zaman aralığını belirtebilirsiniz. Zamanlayıcının bir Enabled olayı tetikleyip tetiklememesi gerektiğini belirtmek için Elapsed özelliğini kullanın. Belirtilen aralık geçtikten sonra bir olayın yalnızca bir kez tetiklenmesi gerekiyorsa, Elapsed değerini AutoReset olarak ayarlayın. Varsayılan AutoReset özelliği değeri true olup, bu, Elapsed olayının Interval özelliği tarafından tanımlanan aralıkta düzenli olarak tetiklendiği anlamına gelir.
Daha fazla bilgi ve örnek için bkz System.Timers.Timer. .
System.Threading.PeriodicTimer sınıfı
Belirtilen bir aralıktaki her bir tick'i beklemenizi sağlayan System.Threading.PeriodicTimer sınıfı, PeriodicTimer.WaitForNextTickAsync çağrısından sonra iş yapmanızı sağlar.
Bir System.Threading.PeriodicTimer nesne oluşturduğunuzda, zamanlayıcının her bir onay işareti arasındaki süreyi belirleyen bir TimeSpan belirtirsiniz. Önceki zamanlayıcı sınıflarında olduğu gibi bir geri çağırma iletmek veya bir olay işleyicisi ayarlamak yerine, WaitForNextTickAsync'yu bekleyerek belirtilen aralık süresince zamanlayıcıyı ilerletmek için doğrudan kapsam dahilinde çalışma gerçekleştirirsiniz.
WaitForNextTickAsync yöntemi, zamanlayıcı başarıyla tetiklendiğinde bir ValueTask<bool>; zamanlayıcı, true çağrılarak iptal edildiğinde ise bir false döndürür.
WaitForNextTickAsync isteğe bağlı olarak bir CancellationTokenkabul eder ve bu da iptal istendiğinde sonucu TaskCanceledException olarak elde eder.
Daha fazla bilgi için bkz. System.Threading.PeriodicTimer.