Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. |
Übersetzung
Original
|
Timer-Klasse
Erstellt wiederkehrende Ereignisse in einer Anwendung.
Assembly: System (in System.dll)
Der Timer-Typ macht die folgenden Member verfügbar.
| Name | Beschreibung | |
|---|---|---|
|
Timer() | Initialisiert eine neue Instanz der Timer-Klasse und legt alle Eigenschaften auf die Anfangswerte fest. |
|
Timer(Double) | Initialisiert eine neue Instanz der Timer-Klasse, wobei die Interval-Eigenschaft auf den angegebenen Wert festgelegt ist. |
| Name | Beschreibung | |
|---|---|---|
|
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. |
|
CanRaiseEvents | Ruft einen Wert ab, der angibt, ob die Komponente ein Ereignis auslösen kann. (Von Component geerbt.) |
|
Container | Ruft den IContainer ab, der die Component enthält. (Von Component geerbt.) |
|
DesignMode | Ruft einen Wert ab, der angibt, ob sich Component gegenwärtig im Entwurfsmodus befindet. (Von Component geerbt.) |
|
Enabled | Ruft einen Wert ab, der angibt, ob Timer das Elapsed-Ereignis auslösen soll, oder legt diesen fest. |
|
Events | Ruft die Liste der Ereignishandler ab, die dieser Component angefügt sind. (Von Component geerbt.) |
|
Interval | Ruft das Intervall ab, in dem das Elapsed-Ereignis ausgelöst wird, oder legt dieses fest. |
|
Site | Infrastruktur. Ruft die Site ab, die die Timer-Klasse im Entwurfsmodus an ihren Container bindet, oder legt diese fest. (Überschreibt Component.Site.) |
|
SynchronizingObject | Ruft das Objekt ab, das zum Marshallen von Ereignishandleraufrufen verwendet wird, die nach Ablauf eines Intervalls ausgegeben werden, oder legt dieses fest. |
| Name | Beschreibung | |
|---|---|---|
|
BeginInit | Beginnt die Laufzeitinitialisierung eines Timer, der in einem Formular oder von einer anderen Komponente verwendet wird. |
|
Close | Gibt die von der Timer-Klasse verwendeten Ressourcen frei. |
|
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.) |
|
Dispose() | Gibt sämtliche von der Component verwendeten Ressourcen frei. (Von Component geerbt.) |
|
Dispose(Boolean) | Infrastruktur. Gibt alle von der aktuellen Timer-Klasse verwendeten Ressourcen frei. (Überschreibt Component.Dispose(Boolean).) |
|
EndInit | Beendet die Laufzeitinitialisierung eines Timer, der in einem Formular oder von einer anderen Komponente verwendet wird. |
|
Equals(Object) | Bestimmt, ob das angegebene Object und das aktuelle Object gleich sind. (Von Object geerbt.) |
|
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.) |
|
GetHashCode | Fungiert als Hashfunktion für einen bestimmten Typ. (Von Object geerbt.) |
|
GetLifetimeService | Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert. (Von MarshalByRefObject geerbt.) |
|
GetService | Gibt ein Objekt zurück, das einen von der Component oder von deren Container bereitgestellten Dienst darstellt. (Von Component geerbt.) |
|
GetType | Ruft den Type der aktuellen Instanz ab. (Von Object geerbt.) |
|
InitializeLifetimeService | Ruft ein Lebensdauerdienstobjekt ab, mit dem die Lebensdauerrichtlinien für diese Instanz gesteuert werden können. (Von MarshalByRefObject geerbt.) |
|
MemberwiseClone() | Erstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.) |
|
MemberwiseClone(Boolean) | Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts. (Von MarshalByRefObject geerbt.) |
|
Start | Beginnt mit dem Auslösen des Elapsed-Ereignisses durch Festlegen von Enabled auf true. |
|
Stop | Unterbricht das Auslösen des Elapsed-Ereignisses durch Festlegen von Enabled auf false. |
|
ToString | Gibt einen String zurück, der den Namen dieser Component enthält, sofern vorhanden. Diese Methode sollte nicht überschrieben werden. (Von Component geerbt.) |
| Name | Beschreibung | |
|---|---|---|
|
Disposed | Tritt ein, wenn die Komponente durch einen Aufruf der Dispose-Methode freigegeben wird. (Von Component geerbt.) |
|
Elapsed | Tritt ein, wenn das Intervall abläuft. |
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
|
|---|
|
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
|
|---|
|
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
|
|---|
|
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
|
|---|
|
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 ... */
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.
|
Datum |
Versionsgeschichte |
Grund |
|---|---|---|
|
Mai 2010 |
Ein ungültiger Wert für die SynchronizingObject-Eigenschaft wurde korrigiert. |
Korrektur inhaltlicher Fehler. |
Hinweis