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.
Belirli bir aralık sonrasında yinelenen olaylar oluşturma seçeneğiyle 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, her 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
Timer Bileşen, özelliğindeki milisaniye Interval sayısı geçtikten 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ışması 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 dener.
Ö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 sınıfını System.Threading.Timer kullanabilirsiniz.
Bu tür IDisposable arabirimini uygular. Kullanımını bitirdiğinizde, doğrudan ya da dolaylı yoldan atmalısınız. Türü doğrudan atabilmek için, bir Disposetry/ bloğunda catch yöntemini çağırın. Bunu dolaylı olarak atmak için using (C#'de) veya Using (Visual Basic'te) gibi 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 tetiklemesinden daha fazla doğrulukla sonuçlanır.
System.Timers.Timer bileşeni, özelliğin Elapsed değerine (milisaniye cinsinden) Interval göre olayı oluşturur. İ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 kullanabilirsiniz Timer .
Ö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 Interval özelliğine bakın.
Uyarı
Kullanılan sistem saati GetTickCount tarafından kullanılan saatle aynıdır ve timeBeginPeriod ve timeEndPeriod ile yapılan değişikliklerden etkilenmez.
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 truevarsayı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 gizler. Bu davranış, .NET Framework'ün gelecek sürümlerinde değişebilir. Ancak, zaman uyumsuz olarak yürütülen ve işlecini (C#'de) veya Await işlecini (Visual Basic'te) içeren await olay işleyicileri için bunun doğru 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 isenullElapsed, olay bir ThreadPool iş parçacığında oluşturulur. Olayın işlenmesi değerinden Elapsed daha Intervaluzun sürüyorsa, olay başka bir ThreadPool iş parçacığında yeniden tetiklenebilir. Bu durumda, olay işleyicisi yeniden giriş yapmalıdır.
Uyarı
Olay işleme yöntemi, başka bir iş parçacığının yöntemini çağırması Stop veya özelliğini falseolarak ayarlaması ile aynı anda bir iş parçacığında Enabled çalışabilir. Bu, zamanlayıcı durdurulduktan sonra olayın tetiklenmesine neden Elapsed olabilir. yöntemi için örnek kod, bu yarış durumundan Stop kaçınmanın bir yolunu gösterir.
olmasa SynchronizingObjectnullbile, Elapsed olaylar veya Stop yöntemi çağrıldıktan sonra Dispose veya özelliği olarak ayarlandıktan falsesonra 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ınır. Bu yarış durumunu çözmenin bir yolu, olayın olay işleyicisine Elapsed sonraki olayları yoksaydığını 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.
Tavsiye
.NET, her biri farklı işlevler sunan adlı Timerdört sınıf içerir:
- System.Timers.Timer (bu konu): bir olayı düzenli aralıklarla 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 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 (Yalnızca.NET Framework): düzenli aralıklarla zaman uyumsuz veya zaman uyumlu web sayfası geri göndermeleri gerçekleştiren bir ASP.NET bileşeni.
Oluşturucular
| Name | Description |
|---|---|
| Timer() |
Sınıfının yeni bir örneğini Timer başlatır ve tüm özellikleri ilk 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ği belirtilen süreye Timer ayarlayarak Interval sınıfının yeni bir örneğini başlatır. |
Özellikler
| Name | Description |
|---|---|
| AutoReset |
olayın yalnızca bir kez mi ( |
| 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 ifade edilen 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
| Name | Description |
|---|---|
| BeginInit() |
Formda veya başka bir Timer bileşen tarafından kullanılan bir öğ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() |
tarafından Componentkullanı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() |
Formda veya başka bir bileşen tarafından kullanılan bir Timer öğesinin ç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 Componenttarafından Container sağlanan bir hizmeti temsil eden bir nesnesi döndürür. (Devralındığı yer: Component) |
| GetType() |
Geçerli örneğin Type 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 Objectbasit 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ı Stringiçeren bir Component döndürür. Bu yöntem geçersiz kılınmamalıdır. (Devralındığı yer: Component) |
Ekinlikler
| Name | Description |
|---|---|
| Disposed |
Bileşen yöntemine Dispose() yapılan bir çağrıyla atıldığında gerçekleşir. (Devralındığı yer: Component) |
| Elapsed |
Aralık 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. Hiçbir örnek üyesi için iş parçacığı güvenliği garanti edilmez.