Timer.Elapsed Ereignis
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Tritt auf, wenn das Intervall verstrichen ist.
public:
event System::Timers::ElapsedEventHandler ^ Elapsed;
public event System.Timers.ElapsedEventHandler Elapsed;
[System.Timers.TimersDescription("TimerIntervalElapsed")]
public event System.Timers.ElapsedEventHandler Elapsed;
member this.Elapsed : System.Timers.ElapsedEventHandler
[<System.Timers.TimersDescription("TimerIntervalElapsed")>]
member this.Elapsed : System.Timers.ElapsedEventHandler
Public Custom Event Elapsed As ElapsedEventHandler
Ereignistyp
- Attribute
Beispiele
Im folgenden Beispiel wird ein Timer Objekt instanziiert, das sein Timer.Elapsed Ereignis alle zwei Sekunden auslöst (2000 Millisekunden), einen Ereignishandler für das Ereignis einrichtet und den Timer startet. Der Ereignishandler zeigt den Wert der ElapsedEventArgs.SignalTime Eigenschaft jedes Mal an, wenn sie ausgelöst wird.
using System;
using System.Timers;
public class Example
{
private static Timer aTimer;
public static void Main()
{
// Create a timer and set a two second interval.
aTimer = new System.Timers.Timer();
aTimer.Interval = 2000;
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += OnTimedEvent;
// Have the timer fire repeated events (true is the default)
aTimer.AutoReset = true;
// Start the timer
aTimer.Enabled = true;
Console.WriteLine("Press the Enter key to exit the program at any time... ");
Console.ReadLine();
}
private static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
{
Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
}
}
// The example displays output like the following:
// Press the Enter key to exit the program at any time...
// The Elapsed event was raised at 5/20/2015 8:48:58 PM
// The Elapsed event was raised at 5/20/2015 8:49:00 PM
// The Elapsed event was raised at 5/20/2015 8:49:02 PM
// The Elapsed event was raised at 5/20/2015 8:49:04 PM
// The Elapsed event was raised at 5/20/2015 8:49:06 PM
open System.Timers
let onTimedEvent source (e: ElapsedEventArgs) =
printfn $"The Elapsed event was raised at {e.SignalTime}"
// Create a timer and set a two second interval.
let aTimer = new Timer()
aTimer.Interval <- 2000
// Hook up the Elapsed event for the timer.
aTimer.Elapsed.AddHandler onTimedEvent
// Have the timer fire repeated events (true is the default)
aTimer.AutoReset <- true
// Start the timer
aTimer.Enabled <- true
printfn "Press the Enter key to exit the program at any time... "
stdin.ReadLine() |> ignore
// The example displays output like the following:
// Press the Enter key to exit the program at any time...
// The Elapsed event was raised at 5/20/2015 8:48:58 PM
// The Elapsed event was raised at 5/20/2015 8:49:00 PM
// The Elapsed event was raised at 5/20/2015 8:49:02 PM
// The Elapsed event was raised at 5/20/2015 8:49:04 PM
// The Elapsed event was raised at 5/20/2015 8:49:06 PM
Imports System.Timers
Public Module Example
Private aTimer As Timer
Public Sub Main()
' Create a timer and set a two second interval.
aTimer = New System.Timers.Timer()
aTimer.Interval = 2000
' Hook up the Elapsed event for the timer.
AddHandler aTimer.Elapsed, AddressOf OnTimedEvent
' Have the timer fire repeated events (true is the default)
aTimer.AutoReset = True
' Start the timer
aTimer.Enabled = True
Console.WriteLine("Press the Enter key to exit the program at any time... ")
Console.ReadLine()
End Sub
Private Sub OnTimedEvent(source As Object, e As System.Timers.ElapsedEventArgs)
Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime)
End Sub
End Module
' The example displays output like the following:
' Press the Enter key to exit the program at any time...
' The Elapsed event was raised at 5/20/2015 8:48:58 PM
' The Elapsed event was raised at 5/20/2015 8:49:00 PM
' The Elapsed event was raised at 5/20/2015 8:49:02 PM
' The Elapsed event was raised at 5/20/2015 8:49:04 PM
' The Elapsed event was raised at 5/20/2015 8:49:06 PM
Hinweise
Das Elapsed Ereignis wird ausgelöst, wenn die Enabled Eigenschaft und true das von der Interval Eigenschaft definierte Zeitintervall (in Millisekunden) verstrichen ist. Wenn die AutoReset Eigenschaft lautet true, wird das Ereignis in einem durch die Interval Eigenschaft definierten Intervall wiederholt ausgelöst. Andernfalls wird das Ereignis nur einmal ausgelöst, wenn der Interval Wert zum ersten Mal verstrichen ist.
Wenn Interval nach dem Starten der Timer Anzahl festgelegt ist, wird die Anzahl zurückgesetzt. Wenn Sie z. B. das Intervall auf 5 Sekunden und dann auf "trueIntervall" festlegenEnabled, wird die Anzahl zu dem Zeitpunkt Enabled festgelegt. Wenn Sie das Intervall auf 10 Sekunden zurücksetzen, wenn die Anzahl 3 Sekunden beträgt, wird das Elapsed Ereignis zum ersten Mal 13 Sekunden nach Enabled dem Festlegen auf true".
Wenn es sich bei der SynchronizingObject Eigenschaft nullum das Ereignis handelt, wird das Elapsed Ereignis in einem ThreadPool Thread ausgelöst. Wenn die Verarbeitung des Elapsed Ereignisses länger dauert als Interval, wird das Ereignis möglicherweise erneut in einem anderen ThreadPool Thread ausgelöst. In diesem Fall sollte der Ereignishandler erneut ausgeführt werden.
Hinweis
Die Ereignisbehandlungsmethode kann auf einem Thread gleichzeitig ausgeführt werden, während ein anderer Thread die Stop Methode aufruft oder die Enabled Eigenschaft auf falselegt. Dies kann dazu führen, dass das Elapsed Ereignis ausgelöst wird, nachdem der Timer beendet wurde. Der Beispielcode für die Stop Methode zeigt eine Möglichkeit, diese Racebedingung zu vermeiden.
Selbst wenn SynchronizingObject dies nicht nullder Fall ist, können Ereignisse auftreten, Elapsed nachdem die StopDispose Eigenschaft aufgerufen oder auf die Enabled Eigenschaft festgelegt falsewurde, da das Signal zum Auslösen des Elapsed Ereignisses immer für die Ausführung in einem Threadpoolthread in die Warteschlange gestellt wird. Eine Möglichkeit, diese Racebedingung zu beheben, besteht darin, ein Flag festzulegen, das dem Ereignishandler für das Elapsed Ereignis angibt, nachfolgende Ereignisse zu ignorieren.
Die Timer Komponente erfasst und unterdrückt alle Ausnahmen, die von Ereignishandlern für das Elapsed Ereignis ausgelöst werden. Dieses Verhalten kann in zukünftigen Versionen von .NET Framework geändert werden.