Timer Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Yinelenen olaylar oluşturma seçeneğiyle, belirli bir aralık sonrasında bir olay oluşturur.
public ref class Timer : System::ComponentModel::Component, System::ComponentModel::ISupportInitialize
public class Timer : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
type Timer = class
inherit Component
interface ISupportInitialize
Public Class Timer
Inherits Component
Implements ISupportInitialize
- Devralma
- Uygulamalar
Örnekler
Aşağıdaki örnek, iki saniyede bir System.Timers.Timer
(2.000 milisaniye) olayını başlatan Timer.Elapsed , olay için bir olay işleyicisi ayarlayan ve zamanlayıcıyı başlatan bir nesnenin örneğini oluşturur. Olay işleyicisi, her yükseltildiğinde özelliğinin ElapsedEventArgs.SignalTime değerini görüntüler.
using System;
using System.Timers;
public class Example
{
private static System.Timers.Timer aTimer;
public static void Main()
{
SetTimer();
Console.WriteLine("\nPress the Enter key to exit the application...\n");
Console.WriteLine("The application started at {0:HH:mm:ss.fff}", DateTime.Now);
Console.ReadLine();
aTimer.Stop();
aTimer.Dispose();
Console.WriteLine("Terminating the application...");
}
private static void SetTimer()
{
// Create a timer with a two second interval.
aTimer = new System.Timers.Timer(2000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",
e.SignalTime);
}
}
// The example displays output like the following:
// Press the Enter key to exit the application...
//
// The application started at 09:40:29.068
// The Elapsed event was raised at 09:40:31.084
// The Elapsed event was raised at 09:40:33.100
// The Elapsed event was raised at 09:40:35.100
// The Elapsed event was raised at 09:40:37.116
// The Elapsed event was raised at 09:40:39.116
// The Elapsed event was raised at 09:40:41.117
// The Elapsed event was raised at 09:40:43.132
// The Elapsed event was raised at 09:40:45.133
// The Elapsed event was raised at 09:40:47.148
//
// Terminating the application...
open System
open System.Timers
let onTimedEvent source (e: ElapsedEventArgs) =
printfn $"""The Elapsed event was raised at {e.SignalTime.ToString "HH:mm:ss.fff"}"""
// Create a timer with a two second interval.
let aTimer = new Timer 2000
// Hook up the Elapsed event for the timer.
aTimer.Elapsed.AddHandler onTimedEvent
aTimer.AutoReset <- true
aTimer.Enabled <- true
printfn "\nPress the Enter key to exit the application...\n"
printfn $"""The application started at {DateTime.Now.ToString "HH:mm:ss.fff"}"""
stdin.ReadLine() |> ignore
aTimer.Stop()
aTimer.Dispose()
printfn "Terminating the application..."
// The example displays output like the following:
// Press the Enter key to exit the application...
//
// The application started at 09:40:29.068
// The Elapsed event was raised at 09:40:31.084
// The Elapsed event was raised at 09:40:33.100
// The Elapsed event was raised at 09:40:35.100
// The Elapsed event was raised at 09:40:37.116
// The Elapsed event was raised at 09:40:39.116
// The Elapsed event was raised at 09:40:41.117
// The Elapsed event was raised at 09:40:43.132
// The Elapsed event was raised at 09:40:45.133
// The Elapsed event was raised at 09:40:47.148
//
// Terminating the application...
Imports System.Timers
Public Module Example
Private aTimer As System.Timers.Timer
Public Sub Main()
SetTimer()
Console.WriteLine("{0}Press the Enter key to exit the application...{0}",
vbCrLf)
Console.WriteLine("The application started at {0:HH:mm:ss.fff}",
DateTime.Now)
Console.ReadLine()
aTimer.Stop()
aTimer.Dispose()
Console.WriteLine("Terminating the application...")
End Sub
Private Sub SetTimer()
' Create a timer with a two second interval.
aTimer = New System.Timers.Timer(2000)
' Hook up the Elapsed event for the timer.
AddHandler aTimer.Elapsed, AddressOf OnTimedEvent
aTimer.AutoReset = True
aTimer.Enabled = True
End Sub
' The event handler for the Timer.Elapsed event.
Private Sub OnTimedEvent(source As Object, e As ElapsedEventArgs)
Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",
e.SignalTime)
End Sub
End Module
' The example displays output like the following:
' Press the Enter key to exit the application...
'
' The application started at 09:40:29.068
' The Elapsed event was raised at 09:40:31.084
' The Elapsed event was raised at 09:40:33.100
' The Elapsed event was raised at 09:40:35.100
' The Elapsed event was raised at 09:40:37.116
' The Elapsed event was raised at 09:40:39.116
' The Elapsed event was raised at 09:40:41.117
' The Elapsed event was raised at 09:40:43.132
' The Elapsed event was raised at 09:40:45.133
' The Elapsed event was raised at 09:40:47.148
'
' Terminating the application...
Açıklamalar
BileşenTimer, özellikteki milisaniye Interval sayısı dolduktan sonra uygulamanızda bir olay oluşturan sunucu tabanlı bir Elapsed zamanlayıcıdır. nesnesini, özelliğini kullanarak AutoReset olayı yalnızca bir kez veya art arda tetikleecek şekilde yapılandırabilirsinizTimer. Genellikle, bir Timer nesne gerektiğinde kapsam içinde kalması için sınıf düzeyinde bildirilir. Ardından, düzenli işleme sağlamak için olayını işleyebilirsiniz Elapsed . Örneğin, haftanın 7 günü, günde 24 saat çalıştırılmaması gereken kritik bir sunucunuz olduğunu varsayalım. Sunucuyu düzenli aralıklarla denetlemek ve sistemin çalışır durumda olduğundan emin olmak için nesne kullanan bir Timer hizmet oluşturabilirsiniz. Sistem yanıt vermiyorsa, hizmet sunucuyu yeniden başlatmayı veya bir yöneticiyi bilgilendirmeyi deneyebilir.
Önemli
Timer sınıfı, .NET Standard 1.6 ve daha düşük sürümler gibi tüm .NET uygulamaları ve sürümleri için kullanılamaz. Bu gibi durumlarda bunun yerine sınıfını System.Threading.Timer kullanabilirsiniz.
Bu tür arabirimini IDisposable uygular. Türünü kullanmayı bitirdiğinizde, doğrudan veya dolaylı olarak atmalısınız. Türü doğrudan atmak için yöntemini bir try
/catch
blokta çağırın.Dispose Bunu dolaylı olarak atmak için (C#'ta) veya Using
(Visual Basic'te) gibi using
bir dil yapısı kullanın. Daha fazla bilgi için arabirim konusunun "IDisposable Uygulayan Bir Nesne Kullanma" bölümüne IDisposable bakın.
Sunucu tabanlı System.Timers.Timer sınıf, çok iş parçacıklı bir ortamda çalışan iş parçacıklarıyla kullanılmak üzere tasarlanmıştır. Sunucu süreölçerleri, tetiklenen Elapsed olayı işlemek için iş parçacıkları arasında hareket edebilir ve bu da Windows zamanlayıcılarının olayı zamanında yükseltmesinden daha fazla doğruluk sağlar.
System.Timers.Timer Bileşeni, özelliğinin Elapsed değerine (milisaniye cinsinden) Interval göre olayı tetikler. İhtiyacınız olan işlemeyi gerçekleştirmek için bu olayı işleyebilirsiniz. Örneğin, satış siparişlerini sürekli olarak bir veritabanına postalayan bir çevrimiçi satış uygulamanız olduğunu varsayalım. Gönderim yönergelerini derleyen hizmet, her siparişi ayrı ayrı işlemek yerine bir toplu sipariş üzerinde çalışır. Toplu işlemi her 30 dakikada bir başlatmak için bir Timer kullanabilirsiniz.
Önemli
System.Timers.Timer sınıfı, sistem saatiyle aynı çözünürlüğe sahiptir. Bu, özellik sistem saatinin Elapsed çözünürlüğünden küçükse Interval olayın sistem saatinin çözünürlüğüyle tanımlanan bir aralıkta tetiklenmesi anlamına gelir. Daha fazla bilgi için özelliğine Interval bakın.
Not
Kullanılan sistem saati, TimeBeginPeriod ve timeEndPeriod ile yapılan değişikliklerden etkilenmeyen GetTickCount tarafından kullanılan saatle aynıdır.
AutoReset olarak ayarlandığındafalse
, ilki geçtikten Elapsed sonra Interval bir System.Timers.Timer nesne olayı yalnızca bir kez tetikler. Olayı, tarafından Intervaltanımlanan aralıkta düzenli olarak yükseltmeye Elapsed devam etmek için true
varsayılan değer olan olarak ayarlayınAutoReset.
Bileşen, Timer olay işleyicileri tarafından olay için Elapsed oluşan tüm özel durumları yakalar ve bastırır. Bu davranış, .NET Framework gelecek sürümlerinde değiştirilebilir. Ancak, bunun zaman uyumsuz olarak yürütülen ve işlecini (C#'da) veya Await
işlecini (Visual Basic'te) içeren await
olay işleyicileri için geçerli olmadığını unutmayın. Aşağıdaki örnekte gösterildiği gibi, bu olay işleyicilerinde oluşan özel durumlar çağıran iş parçacığına geri yayılır. Zaman uyumsuz yöntemlerde oluşan özel durumlar hakkında daha fazla bilgi için bkz. Özel Durum İşleme.
using System;
using System.Threading.Tasks;
using System.Timers;
class Example
{
static void Main()
{
Timer timer = new Timer(1000);
timer.Elapsed += async ( sender, e ) => await HandleTimer();
timer.Start();
Console.Write("Press any key to exit... ");
Console.ReadKey();
}
private static Task HandleTimer()
{
Console.WriteLine("\nHandler not implemented..." );
throw new NotImplementedException();
}
}
// The example displays output like the following:
// Press any key to exit...
// Handler not implemented...
//
// Unhandled Exception: System.NotImplementedException: The method or operation is not implemented.
// at Example.HandleTimer()
// at Example.<<Main>b__0>d__2.MoveNext()
// --- End of stack trace from previous location where exception was thrown ---
// at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c__DisplayClass2.<ThrowAsync>b__5(Object state)
// at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
// at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
// at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
// at System.Threading.ThreadPoolWorkQueue.Dispatch()
open System
open System.Threading.Tasks
open System.Timers
let handleTimer () =
printfn "\nHandler not implemented..."
raise (NotImplementedException()): Task
let timer = new Timer 1000
timer.Elapsed.AddHandler(fun sender e -> task { do! handleTimer () } |> ignore)
timer.Start()
printf "Press any key to exit... "
Console.ReadKey() |> ignore
// The example displays output like the following:
// Press any key to exit...
// Handler not implemented...
//
// Unhandled Exception: System.NotImplementedException: The method or operation is not implemented.
// at Example.HandleTimer()
// at Example.<<Main>b__0>d__2.MoveNext()
// --- End of stack trace from previous location where exception was thrown ---
// at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c__DisplayClass2.<ThrowAsync>b__5(Object state)
// at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
// at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
// at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
// at System.Threading.ThreadPoolWorkQueue.Dispatch()
Imports System.Threading.Tasks
Imports System.Timers
Public Module Example
Public Sub Main()
Dim timer As New Timer(1000)
AddHandler timer.Elapsed, AddressOf Example.HandleTimer
'timer.Elapsed = Async ( sender, e ) => await HandleTimer()
timer.Start()
Console.Write("Press any key to exit... ")
Console.ReadKey()
End Sub
Private Async Sub HandleTimer(sender As Object, e As EventArgs)
Await Task.Run(Sub()
Console.WriteLine()
Console.WriteLine("Handler not implemented..." )
Throw New NotImplementedException()
End Sub)
End Sub
End Module
' The example displays output like the following:
' Press any key to exit...
' Handler not implemented...
'
' Unhandled Exception: System.NotImplementedException: The method or operation is not implemented.
' at Example._Lambda$__1()
' at System.Threading.Tasks.Task.Execute()
' --- End of stack trace from previous location where exception was thrown ---
' at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
' at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
' at Example.VB$StateMachine_0_HandleTimer.MoveNext()
' --- End of stack trace from previous location where exception was thrown ---
' at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c__DisplayClass2.<ThrowAsync>b__5(Object state)
' at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
' at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
' at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
' at System.Threading.ThreadPoolWorkQueue.Dispatch()
SynchronizingObject özelliği isenull
Elapsed, olay bir ThreadPool iş parçacığında oluşturulur. Olayın işlenmesi değerinden ElapsedIntervaldaha uzun sürüyorsa, olay başka bir ThreadPool iş parçacığında yeniden tetiklenebilir. Bu durumda, olay işleyicisi yeniden girişi olmalıdır.
Not
Olay işleme yöntemi, başka bir iş parçacığının yöntemini çağırması Stop veya özelliğini false
olarak ayarlaması ile aynı anda bir iş parçacığında Enabled çalışabilir. Bu, zamanlayıcı durdurulduktan sonra olayın tetiklenmesinin sonucunu Elapsed verebilir. yöntemi için örnek kod, bu yarış durumundan Stop kaçınmanın bir yolunu gösterir.
olmasa SynchronizingObjectnull
bile, Elapsed olaylar veya Stop yöntemi çağrıldıktan sonra Dispose veya özelliği olarak ayarlandıktan false
sonra Enabled gerçekleşebilir çünkü olayı tetikleye Elapsed sinyal her zaman bir iş parçacığı havuzu iş parçacığında yürütülmek üzere kuyruğa alınmıştır. Bu yarış durumunu çözmenin bir yolu, olay işleyicisine Elapsed sonraki olayları yoksaymayı bildiren bir bayrak ayarlamaktır.
sınıfını, zamanlayıcıyı System.Timers.Timer bu kullanıcı arabirimi öğesine yerleştirmeden form veya denetim gibi bir kullanıcı arabirimi öğesiyle kullanırsanız, olayının kullanıcı arabirimi iş parçacığına sıralanmış olması için SynchronizingObject öğesini içeren Timer formu veya denetimi özelliğine atayın.
örneğinin varsayılan özellik değerlerinin Timerlistesi için oluşturucuya Timer bakın.
İpucu
.NET adlı Timer
dört sınıf içerir ve bunların her biri farklı işlevler sunar:
- System.Timers.Timer (bu konu başlığı): düzenli aralıklarla bir olayı tetikler. sınıfı, çok iş parçacıklı bir ortamda sunucu tabanlı veya hizmet bileşeni olarak kullanılmak üzere tasarlanmıştır; kullanıcı arabirimi yoktur ve çalışma zamanında görünmez.
- System.Threading.Timer: bir iş parçacığı havuzu iş parçacığında düzenli aralıklarla tek bir geri çağırma yöntemi yürütür. Geri çağırma yöntemi, zamanlayıcı örneği oluşturulurken tanımlanır ve değiştirilemez. System.Timers.Timer Sınıfı gibi bu sınıf da çok iş parçacıklı bir ortamda sunucu tabanlı veya hizmet bileşeni olarak kullanılmak üzere tasarlanmıştır; kullanıcı arabirimi yoktur ve çalışma zamanında görünmez.
- System.Windows.Forms.Timer: bir olayı düzenli aralıklarla tetikleyen Windows Forms bileşeni. Bileşenin kullanıcı arabirimi yoktur ve tek iş parçacıklı bir ortamda kullanılmak üzere tasarlanmıştır.
- System.Web.UI.Timer(yalnızca .NET Framework): düzenli aralıklarla zaman uyumsuz veya zaman uyumlu web sayfası geri gönderme işlemleri gerçekleştiren bir ASP.NET bileşeni.
Oluşturucular
Timer() |
sınıfının yeni bir örneğini Timer başlatır ve tüm özellikleri başlangıç değerlerine ayarlar. |
Timer(Double) |
sınıfının yeni bir örneğini Timer başlatır ve özelliğini belirtilen milisaniye sayısına ayarlar Interval . |
Timer(TimeSpan) |
özelliğini belirtilen süreye Timer ayarlayarak Interval sınıfının yeni bir örneğini başlatır. |
Özellikler
AutoReset |
olayının yalnızca bir kez mi () yoksa art arda mı Timer ( |
CanRaiseEvents |
Bileşenin olay oluşturup oluşturamayacağını belirten bir değer alır. (Devralındığı yer: Component) |
Container |
öğesini IContainer içeren öğesini Componentalır. (Devralındığı yer: Component) |
DesignMode |
öğesinin şu anda tasarım modunda olup olmadığını Component gösteren bir değer alır. (Devralındığı yer: Component) |
Enabled |
öğesinin olayı tetikleyip tetiklemeyeceğini TimerElapsed belirten bir değer alır veya ayarlar. |
Events |
Bu Componentöğesine eklenen olay işleyicilerinin listesini alır. (Devralındığı yer: Component) |
Interval |
Olayın tetiklendiği Elapsed milisaniye cinsinden aralığı alır veya ayarlar. |
Site |
öğesini kapsayıcısına bağlayan siteyi Timer tasarım modunda alır veya ayarlar. |
SynchronizingObject |
Bir aralık geçtiğinde verilen olay işleyici çağrılarını sıralamak için kullanılan nesneyi alır veya ayarlar. |
Yöntemler
BeginInit() |
Bir formda veya başka bir bileşen tarafından kullanılan bir Timer öğesinin çalışma zamanı başlatmasını başlatır. |
Close() |
tarafından Timerkullanılan kaynakları serbest bırakır. |
CreateObjRef(Type) |
Uzak bir nesneyle iletişim kurmak için kullanılan bir ara sunucu oluşturmak için gereken tüm ilgili bilgileri içeren bir nesne oluşturur. (Devralındığı yer: MarshalByRefObject) |
Dispose() |
Component tarafından kullanılan tüm kaynakları serbest bırakır. (Devralındığı yer: Component) |
Dispose(Boolean) |
Geçerli Timertarafından kullanılan tüm kaynakları serbest bırakır. |
EndInit() |
Bir formda veya başka bir bileşen tarafından kullanılan bir Timer çalışma zamanı başlatmasını sonlandırır. |
Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
GetLifetimeService() |
Geçersiz.
Bu örnek için yaşam süresi ilkesini denetleen geçerli yaşam süresi hizmet nesnesini alır. (Devralındığı yer: MarshalByRefObject) |
GetService(Type) |
veya tarafından ComponentContainersağlanan bir hizmeti temsil eden bir nesnesi döndürür. (Devralındığı yer: Component) |
GetType() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
InitializeLifetimeService() |
Geçersiz.
Bu örneğin yaşam süresi ilkesini denetlemek için bir yaşam süresi hizmet nesnesi alır. (Devralındığı yer: MarshalByRefObject) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
MemberwiseClone(Boolean) |
Geçerli MarshalByRefObject nesnenin sığ bir kopyasını oluşturur. (Devralındığı yer: MarshalByRefObject) |
Start() |
olarak ayarlayarak Enabled olayı yükseltmeye Elapsed |
Stop() |
olarak ayarlayarak Enabled olayı yükseltmeyi Elapsed |
ToString() |
Varsa, adını Componentiçeren bir String döndürür. Bu yöntem geçersiz kılınmamalıdır. (Devralındığı yer: Component) |
Ekinlikler
Disposed |
Bileşen yöntemine Dispose() yapılan bir çağrı tarafından atıldığında gerçekleşir. (Devralındığı yer: Component) |
Elapsed |
Zaman aralığı geçtiğinde gerçekleşir. |
Şunlara uygulanır
İş Parçacığı Güvenliği
Bu türün tüm genel static
üyeleri iş parçacığı güvenlidir. Örnek üyelerin iş parçacığı güvenli olmaları garanti edilmez.