(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

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.

  NameBeschreibung
Öffentliche MethodeTimer()Initialisiert eine neue Instanz der Timer-Klasse und legt alle Eigenschaften auf die Anfangswerte fest.
Öffentliche MethodeTimer(Double)Initialisiert eine neue Instanz der Timer-Klasse, wobei die Interval-Eigenschaft auf den angegebenen Wert festgelegt ist.
Zum Seitenanfang

  NameBeschreibung
Öffentliche EigenschaftAutoResetRuft 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 EigenschaftCanRaiseEventsRuft einen Wert ab, der angibt, ob die Komponente ein Ereignis auslösen kann. (Von Component geerbt.)
Öffentliche EigenschaftContainerRuft den IContainer ab, der die Component enthält. (Von Component geerbt.)
Geschützte EigenschaftDesignModeRuft einen Wert ab, der angibt, ob sich Component gegenwärtig im Entwurfsmodus befindet. (Von Component geerbt.)
Öffentliche EigenschaftEnabledRuft einen Wert ab, der angibt, ob Timer das Elapsed-Ereignis auslösen soll, oder legt diesen fest.
Geschützte EigenschaftEventsRuft die Liste der Ereignishandler ab, die dieser Component angefügt sind. (Von Component geerbt.)
Öffentliche EigenschaftIntervalRuft das Intervall ab, in dem das Elapsed-Ereignis ausgelöst wird, oder legt dieses fest.
Öffentliche EigenschaftSiteInfrastruktur. Ruft die Site ab, die die Timer-Klasse im Entwurfsmodus an ihren Container bindet, oder legt diese fest. (Überschreibt Component.Site.)
Öffentliche EigenschaftSynchronizingObjectRuft das Objekt ab, das zum Marshallen von Ereignishandleraufrufen verwendet wird, die nach Ablauf eines Intervalls ausgegeben werden, oder legt dieses fest.
Zum Seitenanfang

  NameBeschreibung
Öffentliche MethodeBeginInitBeginnt die Laufzeitinitialisierung eines Timer, der in einem Formular oder von einer anderen Komponente verwendet wird.
Öffentliche MethodeCloseGibt die von Timer verwendeten Ressourcen frei.
Öffentliche MethodeCreateObjRefErstellt ein Objekt mit allen relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind. (Von MarshalByRefObject geerbt.)
Öffentliche MethodeDispose() Gibt alle von Component verwendeten Ressourcen frei. (Von Component geerbt.)
Geschützte MethodeDispose(Boolean)Infrastruktur. Gibt alle von der aktuellen Timer-Klasse verwendeten Ressourcen frei. (Überschreibt Component.Dispose(Boolean).)
Öffentliche MethodeEndInitBeendet die Laufzeitinitialisierung eines Timer, der in einem Formular oder von einer anderen Komponente verwendet wird.
Öffentliche MethodeEquals(Object)Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist. (Von Object geerbt.)
Geschützte MethodeFinalize Gibt nicht verwaltete Ressourcen frei und führt andere Bereinigungsvorgänge durch, bevor die Component durch den Garbage Collector entfernt wird. (Von Component geerbt.)
Öffentliche MethodeGetHashCodeFungiert als die Standardhashfunktion. (Von Object geerbt.)
Öffentliche MethodeGetLifetimeServiceRuft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert. (Von MarshalByRefObject geerbt.)
Geschützte MethodeGetServiceGibt ein Objekt zurück, das einen von der Component oder von deren Container bereitgestellten Dienst darstellt. (Von Component geerbt.)
Öffentliche MethodeGetTypeRuft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche MethodeInitializeLifetimeServiceRuft ein Lebensdauerdienstobjekt ab, mit dem die Lebensdauerrichtlinien für diese Instanz gesteuert werden können. (Von MarshalByRefObject geerbt.)
Geschützte MethodeMemberwiseClone()Erstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Geschützte MethodeMemberwiseClone(Boolean)Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts. (Von MarshalByRefObject geerbt.)
Öffentliche MethodeStartBeginnt mit dem Auslösen des Elapsed-Ereignisses durch Festlegen von Enabled auf true.
Öffentliche MethodeStopUnterbricht das Auslösen des Elapsed-Ereignisses durch Festlegen von Enabled auf false.
Öffentliche MethodeToString Gibt einen String zurück, der den Namen dieser Componente enthält, sofern vorhanden. Diese Methode sollte nicht überschrieben werden. (Von Component geerbt.)
Zum Seitenanfang

  NameBeschreibung
Öffentliches EreignisDisposed Wird ausgelöst, wenn die Komponente durch einen Aufruf der Dispose-Methode freigegeben wird. (Von Component geerbt.)
Öffentliches EreignisElapsedTritt 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.

HinweisHinweis

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.

HinweisHinweis

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.

HinweisHinweis

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.

HinweisHinweis

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.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

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

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft