Aracılığıyla paylaş


Timer Sınıf

Tanım

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 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 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 isenullElapsed, 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 falseolarak 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 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ı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ı Timerdö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 (falsetrue) tetiklenmesi Elapsed gerektiğini belirten bir Boole değeri alır veya ayarlar.

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 Elapsedtruebaşlar.

Stop()

olarak ayarlayarak Enabled olayı yükseltmeyi Elapsedfalsedurdurur.

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.

Ayrıca bkz.