Freigeben über


Timer-Klasse

Erstellt wiederkehrende Ereignisse in einer Anwendung.

Namespace: System.Timers
Assembly: System (in system.dll)

Syntax

'Declaration
Public Class Timer
    Inherits Component
    Implements ISupportInitialize
'Usage
Dim instance As Timer
public class Timer : Component, ISupportInitialize
public ref class Timer : public Component, ISupportInitialize
public class Timer extends Component implements ISupportInitialize
public class Timer extends Component implements ISupportInitialize

Hinweise

Hinweis

Das auf diese Klasse angewendete HostProtectionAttribute-Attribut besitzt den Resources-Eigenschaftenwert Synchronization oder ExternalThreading. Das HostProtectionAttribute hat keine Auswirkungen auf Desktopanwendungen (die normalerweise durch Doppelklicken auf ein Symbol, Eingeben eines Befehls oder eines URL in einem Browser gestartet werden). Weitere Informationen finden Sie unter der HostProtectionAttribute-Klasse oder unter SQL Server-Programmierung und Hostschutzattribute.

Die Timer-Komponente ist ein serverbasierter Zeitgeber, mit dem Sie ein periodisches Intervall angeben können, in dem das Elapsed-Ereignis in der Anwendung ausgelöst wird. Sie können das Ereignis dann behandeln, um die normale Verarbeitung zu gewährleisten. Angenommen, ein unternehmenswichtiger Server muss rund um die Uhr und sieben Tage die Woche ausgeführt werden. In diesem Fall können Sie einen Dienst erstellen, der mit einem Timer regelmäßig den Server überprüft und sicherstellt, dass das System ordnungsgemäß ausgeführt wird. Wenn das System nicht reagiert, kann der Dienst versuchen, den Server neu zu starten, oder einen Administrator benachrichtigen.

Der serverbasierte Timer wurde für die Verwendung mit Arbeitsthreads in einer Multithreadumgebung entwickelt. Serverzeitgeber können zwischen Threads wechseln, um das ausgelöste Elapsed-Ereignis zu behandeln, wodurch eine höhere Genauigkeit erreicht wird als bei Windows-Zeitgebern, da das Ereignis zum richtigen Zeitpunkt ausgelöst wird. Weitere Informationen zu serverbasierten Zeitgebern finden Sie unter Einführung in serverbasierte Zeitgeber.

Die Timer-Komponente löst das Elapsed-Ereignis auf der Grundlage des Werts der Interval-Eigenschaft aus. Sie können dieses Ereignis behandeln, um die erforderliche Verarbeitung durchzuführen. Angenommen, eine Anwendung für Onlinebestellungen übermittelt kontinuierlich Bestellungen an eine Datenbank. Der Dienst für die Kompilierung der Lieferanweisungen verarbeitet die Bestellungen im Batchmodus und nicht einzeln. In diesem Fall könnten Sie einen Timer verwenden, der alle 30 Minuten eine Batchverarbeitung startet.

Hinweis

Wenn AutoReset den Wert false aufweist, löst der Timer das Elapsed-Ereignis nur einmal aus, nachdem das erste Interval abgelaufen ist. Damit das Elapsed-Ereignis weiter im Interval ausgelöst wird, legen Sie AutoReset auf true fest.

Das Elapsed-Ereignis wird in einem ThreadPool-Thread ausgelöst. Wenn die Verarbeitung des Elapsed-Ereignisses länger als Interval dauert, wird das Ereignis möglicherweise erneut in einem weiteren ThreadPool-Thread ausgelöst. Daher sollte der Ereignishandler wiedereintrittsfähig sein.

Hinweis

Die Ereignisbehandlungsmethode kann in einem Thread ausgeführt werden, wenn zur gleichen Zeit ein anderer Thread die Stop-Methode aufruft oder die Enabled-Eigenschaft auf false festlegt. Dies könnte zur Folge haben, dass das Elapsed-Ereignis ausgelöst wird, nachdem der Zeitgeber angehalten wurde. Im Codebeispiel für die Stop-Methode wird eine Möglichkeit gezeigt, diese Racebedingung zu vermeiden.

Wenn Sie die Timer-Klasse mit einem Element der Benutzeroberfläche verwenden, z. B. einem Formular oder Steuerelement, weisen Sie das Formular oder Steuerelement, das Timer enthält, der SynchronizingObject-Eigenschaft zu, sodass das Ereignis zum Thread der Benutzeroberfläche gemarshallt wird.

Die Timer-Klasse wird zur Laufzeit nicht angezeigt.

Eine Liste der anfänglichen Eigenschaftenwerte für eine Instanz der Timer-Klasse finden Sie unter dem Timer-Konstruktor.

Beispiel

Im folgenden Beispiel wird ein Timer erstellt, der alle 5 Sekunden "Hello World!" in der Konsole anzeigt.

Verwenden Sie für dieses Beispiel den System.Timers-Namespace.

Imports System
Imports System.Timers

Public Class Timer1
    
    Public Shared Sub Main()
        ' Normally, the timer is declared at the class level, so
        ' that it doesn't go out of scope when the method ends.
        ' In this example, the timer is needed only while Main 
        ' is executing. However, KeepAlive must be used at the
        ' end of Main, to prevent the JIT compiler from allowing 
        ' aggressive garbage collection to occur before Main 
        ' ends.
        Dim aTimer As New System.Timers.Timer()

        ' Hook up the Elapsed event for the timer.
        AddHandler aTimer.Elapsed, AddressOf OnTimedEvent

        ' Set the Interval to 2 seconds (2000 milliseconds).
        aTimer.Interval = 2000
        aTimer.Enabled = True
        
        Console.WriteLine("Press the Enter key to exit the program.")
        Console.ReadLine()

        ' Keep the timer alive until the end of Main.
        GC.KeepAlive(aTimer)
    End Sub
        
    ' Specify what you want to happen when the Elapsed event is 
    ' raised.
    Private Shared Sub OnTimedEvent(source As Object, e As ElapsedEventArgs)
        Console.WriteLine("Hello World!")
    End Sub
End Class
using System;
using System.Timers;

public class Timer1
{
    public static void Main()
    {
        // Normally, the timer is declared at the class level, so
        // that it doesn't go out of scope when the method ends.
        // In this example, the timer is needed only while Main 
        // is executing. However, KeepAlive must be used at the
        // end of Main, to prevent the JIT compiler from allowing 
        // aggressive garbage collection to occur before Main 
        // ends.
        System.Timers.Timer aTimer = new System.Timers.Timer();

        // Hook up the Elapsed event for the timer.
        aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

        // Set the Interval to 2 seconds (2000 milliseconds).
        aTimer.Interval = 2000;
        aTimer.Enabled = true;
 
        Console.WriteLine("Press the Enter key to exit the program.");
        Console.ReadLine();

        // Keep the timer alive until the end of Main.
        GC.KeepAlive(aTimer);
    }
 
    // Specify what you want to happen when the Elapsed event is 
    // raised.
    private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        Console.WriteLine("Hello World!");
    }
}
 
#using <system.dll>

using namespace System;
using namespace System::Timers;

public ref class Timer1
{
public:
   static void Demo()
   {
      // Normally, the timer is declared at the class level, so
      // that it doesn't go out of scope when the method ends.
      // In this example, the timer is needed only while Demo
      // is executing. However, KeepAlive must be used at the
      // end of Demo, to prevent the JIT compiler from allowing 
      // aggressive garbage collection to occur before Demo
      // ends.
      System::Timers::Timer^ aTimer = gcnew System::Timers::Timer;

      // Hook up the Elapsed event for the timer.
      aTimer->Elapsed += gcnew ElapsedEventHandler( Timer1::OnTimedEvent );
      
      // Set the Interval to 2 seconds (2000 milliseconds).
      aTimer->Interval = 2000;
      aTimer->Enabled = true;

      Console::WriteLine("Press the Enter key to exit the program.");
      Console::ReadLine();

      // Keep the timer alive until the end of the Demo method.
      GC::KeepAlive(aTimer);
   }


private:
   // Specify what you want to happen when the Elapsed event is 
   // raised.
   static void OnTimedEvent( Object^ /*source*/, ElapsedEventArgs^ /*e*/ )
   {
      Console::WriteLine( "Hello World!" );
   }

};

int main()
{
   Timer1::Demo();
}

Vererbungshierarchie

System.Object
   System.MarshalByRefObject
     System.ComponentModel.Component
      System.Timers.Timer

Threadsicherheit

Alle öffentlichen static-Member dieses Typs sind bei Multithreadoperationen sicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

Timer-Member
System.Timers-Namespace
AutoReset
Interval
Elapsed
Timer

Weitere Ressourcen

Einführung in serverbasierte Zeitgeber