Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original
0 von 1 fanden dies hilfreich - Dieses Thema bewerten.

Timer-Klasse

Erstellt wiederkehrende Ereignisse in einer Anwendung.

Namespace:  System.Timers
Assembly:  System (in System.dll)
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public class Timer : Component, ISupportInitialize

Der Timer-Typ macht die folgenden Member verfügbar.

  Name Beschreibung
Öffentliche Methode Timer() Initialisiert eine neue Instanz der Timer-Klasse und legt alle Eigenschaften auf die Anfangswerte fest.
Öffentliche Methode Timer(Double) Initialisiert eine neue Instanz der Timer-Klasse, wobei die Interval-Eigenschaft auf den angegebenen Wert festgelegt ist.
Zum Seitenanfang
  Name Beschreibung
Öffentliche Eigenschaft AutoReset Ruft einen Wert ab, der angibt, ob der Timer das Elapsed-Ereignis nach jedem oder nur nach dem ersten Ablaufen des Intervalls auslöst, oder legt diesen fest.
Geschützte Eigenschaft CanRaiseEvents Ruft einen Wert ab, der angibt, ob die Komponente ein Ereignis auslösen kann. (Von Component geerbt.)
Öffentliche Eigenschaft Container Ruft den IContainer ab, der die Component enthält. (Von Component geerbt.)
Geschützte Eigenschaft DesignMode Ruft einen Wert ab, der angibt, ob sich Component gegenwärtig im Entwurfsmodus befindet. (Von Component geerbt.)
Öffentliche Eigenschaft Enabled Ruft einen Wert ab, der angibt, ob Timer das Elapsed-Ereignis auslösen soll, oder legt diesen fest.
Geschützte Eigenschaft Events Ruft die Liste der Ereignishandler ab, die dieser Component angefügt sind. (Von Component geerbt.)
Öffentliche Eigenschaft Interval Ruft das Intervall ab, in dem das Elapsed-Ereignis ausgelöst wird, oder legt dieses fest.
Öffentliche Eigenschaft Site Infrastruktur. Ruft die Site ab, die die Timer-Klasse im Entwurfsmodus an ihren Container bindet, oder legt diese fest. (Überschreibt Component.Site.)
Öffentliche Eigenschaft SynchronizingObject Ruft das Objekt ab, das zum Marshallen von Ereignishandleraufrufen verwendet wird, die nach Ablauf eines Intervalls ausgegeben werden, oder legt dieses fest.
Zum Seitenanfang
  Name Beschreibung
Öffentliche Methode BeginInit Beginnt die Laufzeitinitialisierung eines Timer, der in einem Formular oder von einer anderen Komponente verwendet wird.
Öffentliche Methode Close Gibt die von der Timer-Klasse verwendeten Ressourcen frei.
Öffentliche Methode CreateObjRef Erstellt ein Objekt mit allen relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind. (Von MarshalByRefObject geerbt.)
Öffentliche Methode Dispose() Gibt sämtliche von der Component verwendeten Ressourcen frei. (Von Component geerbt.)
Geschützte Methode Dispose(Boolean) Infrastruktur. Gibt alle von der aktuellen Timer-Klasse verwendeten Ressourcen frei. (Überschreibt Component.Dispose(Boolean).)
Öffentliche Methode EndInit Beendet die Laufzeitinitialisierung eines Timer, der in einem Formular oder von einer anderen Komponente verwendet wird.
Öffentliche Methode Equals(Object) Bestimmt, ob das angegebene Object und das aktuelle Object gleich sind. (Von Object geerbt.)
Geschützte Methode Finalize Gibt nicht verwaltete Ressourcen frei und führt andere Bereinigungsvorgänge durch, bevor die Component durch die Garbage Collection wieder zugänglich gemacht wird. (Von Component geerbt.)
Öffentliche Methode GetHashCode Fungiert als Hashfunktion für einen bestimmten Typ. (Von Object geerbt.)
Öffentliche Methode GetLifetimeService Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert. (Von MarshalByRefObject geerbt.)
Geschützte Methode GetService Gibt ein Objekt zurück, das einen von der Component oder von deren Container bereitgestellten Dienst darstellt. (Von Component geerbt.)
Öffentliche Methode GetType Ruft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche Methode InitializeLifetimeService Ruft ein Lebensdauerdienstobjekt ab, mit dem die Lebensdauerrichtlinien für diese Instanz gesteuert werden können. (Von MarshalByRefObject geerbt.)
Geschützte Methode MemberwiseClone() Erstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Geschützte Methode MemberwiseClone(Boolean) Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts. (Von MarshalByRefObject geerbt.)
Öffentliche Methode Start Beginnt mit dem Auslösen des Elapsed-Ereignisses durch Festlegen von Enabled auf true.
Öffentliche Methode Stop Unterbricht das Auslösen des Elapsed-Ereignisses durch Festlegen von Enabled auf false.
Öffentliche Methode ToString Gibt einen String zurück, der den Namen dieser Component enthält, sofern vorhanden. Diese Methode sollte nicht überschrieben werden. (Von Component geerbt.)
Zum Seitenanfang
  Name Beschreibung
Öffentliches Ereignis Disposed Tritt ein, wenn die Komponente durch einen Aufruf der Dispose-Methode freigegeben wird. (Von Component geerbt.)
Öffentliches Ereignis Elapsed Tritt ein, wenn das Intervall abläuft.
Zum Seitenanfang

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. Anschließend können durch dieses Ereignis dann regelmäßig wiederkehrende Verarbeitungsschritte ausgeführt werden. 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.

Die Timer-Komponente löst das Elapsed-Ereignis auf der Grundlage des Werts der Interval-Eigenschaft aus. Durch dieses Ereignis können erforderliche Verarbeitungsschritte ausgeführt werden. Angenommen, eine Anwendung für Onlinebestellungen übermittelt kontinuierlich Bestellungen an eine Datenbank. Der Dienst zur 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 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.

In .NET Framework 2.0 und früheren Versionen werden von der Timer-Komponente alle Ausnahmen abgefangen und unterdrückt, die von Ereignishandlern für das Elapsed-Ereignis ausgelöst werden. Dieses Verhalten kann sich in zukünftigen Versionen von .NET Framework ändern.

Wenn die SynchronizingObject-Eigenschaft null ist, wird das Elapsed-Ereignis auf 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. In dieser Situation sollte der Ereignishandler wiedereintretend sein.

Hinweis 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.

Auch wenn SynchronizingObject nicht null ist, können Elapsed-Ereignisse auftreten, nachdem die Dispose-Methode oder die Stop-Methode aufgerufen wurde, oder nachdem die Enabled-Eigenschaft auf false gesetzt wurde, da das Signal zum Auslösen des Elapsed-Ereignisses immer für die Ausführung im Threadpoolthread in die Warteschlange gestellt wird. Eine Möglichkeit, aufzulösen, diese Racebedingung aufzulösen, besteht darin, ein Flag festzulegen, das den Ereignishandler für das Elapsed-Ereignis anweist, nachfolgende Ereignisse zu ignorieren.

Wenn Sie die Timer-Klasse mit einem Element der Benutzeroberfläche verwenden, z. B. einem Formular oder Steuerelement, ohne den Timer in diesem Benutzeroberflächensteuerelement zu platzieren, 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 Eigenschaftswerte für eine Instanz von Timer finden Sie unter Timer-Konstruktor.

Hinweis Hinweis

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

Im folgenden Codebeispiel wird ein Ereignishandler für das Timer.Elapsed-Ereignis eingerichtet; außerdem wird ein Zeitgeber erstellt, und der Zeitgeber wird gestartet. Die SignalTime-Eigenschaft wird vom Ereignishandler immer beim Aufrufen angezeigt.

Hinweis Hinweis

Der Code enthält Deklarationen der Zeitgebervariable auf Klassenebene und in Main. Um zu sehen wie sich aggressive automatische Speicherbereinigung auf einen Timer auswirken kann, der in einer Methode mit langer Laufzeit deklariert wird, können Sie die Deklaration auf Klassenebene auskommentieren und die Auskommentierung der lokalen Variablen aufheben. Damit der Timer nicht gesammelt wird, heben Sie am Ende von Main die Auskommentierung der GC.KeepAlive-Methode auf.


using System;
using System.Timers;

public class Timer1
{
    private static System.Timers.Timer aTimer;

    public static void Main()
    {
        // Normally, the timer is declared at the class level,
        // so that it stays in scope as long as it is needed.
        // If the timer is declared in a long-running method,  
        // KeepAlive must be used to prevent the JIT compiler 
        // from allowing aggressive garbage collection to occur 
        // before the method ends. You can experiment with this
        // by commenting out the class-level declaration and 
        // uncommenting the declaration below; then uncomment
        // the GC.KeepAlive(aTimer) at the end of the method.
        //System.Timers.Timer aTimer;

        // Create a timer with a ten second interval.
        aTimer = new System.Timers.Timer(10000);

        // 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();

        // If the timer is declared in a long-running method, use
        // KeepAlive to prevent garbage collection from occurring
        // before the method ends.
        //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("The Elapsed event was raised at {0}", e.SignalTime);
    }
}

/* This code example produces output similar to the following:

Press the Enter key to exit the program.
The Elapsed event was raised at 5/20/2007 8:42:27 PM
The Elapsed event was raised at 5/20/2007 8:42:29 PM
The Elapsed event was raised at 5/20/2007 8:42:31 PM
...
 */


.NET Framework

Unterstützt in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

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

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

Datum

Versionsgeschichte

Grund

Mai 2010

Ein ungültiger Wert für die SynchronizingObject-Eigenschaft wurde korrigiert.

Korrektur inhaltlicher Fehler.

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Community-Inhalt Hinzufügen
Anmerkungen FAQ