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 ein, wenn das Intervall abläuft.
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
Das folgende Beispiel instanziiert ein Timer-Objekt, das sein Timer.Elapsed-Ereignis alle zwei Sekunden (2000 Millisekunden) auslöst, einen Ereignishandler für das Ereignis einrichtet und den Timer startet. Der Ereignishandler zeigt den Wert der ElapsedEventArgs.SignalTime-Eigenschaft bei jedem Auslösen an.
using namespace System;
using namespace System::Timers;
public ref class Example
{
private:
static System::Timers::Timer^ aTimer;
public:
static void Demo()
{
// Create a timer and set a two second interval.
aTimer = gcnew System::Timers::Timer();
aTimer->Interval = 2000;
// Hook up the Elapsed event for the timer.
aTimer->Elapsed += gcnew System::Timers::ElapsedEventHandler(Example::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);
}
};
int main()
{
Example::Demo();
}
// 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
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 ist true
und das durch die Interval -Eigenschaft definierte Zeitintervall (in Millisekunden) verstreicht. Wenn die AutoReset -Eigenschaft lautet true
, wird das Ereignis wiederholt in einem durch die Interval -Eigenschaft definierten Intervall ausgelöst. Andernfalls wird das Ereignis nur einmal ausgelöst, wenn der Interval Wert zum ersten Mal verstrichen ist.
Wenn Interval festgelegt wird, nachdem der Timer gestartet wurde, wird die Anzahl zurückgesetzt. Wenn Sie beispielsweise das Intervall auf 5 Sekunden festlegen und dann auf true
festlegenEnabled, beginnt die Anzahl zum festgelegten ZeitpunktEnabled. Wenn Sie das Intervall auf 10 Sekunden zurücksetzen, wenn die Anzahl 3 Sekunden beträgt, wird das Elapsed Ereignis zum ersten Mal ausgelöst, 13 Sekunden nachdem Enabled auf true
festgelegt wurde.
Wenn die SynchronizingObject -Eigenschaft lautet null
, wird das Elapsed -Ereignis in einem ThreadPool Thread ausgelöst. Wenn die Verarbeitung des Elapsed Ereignisses länger als Intervaldauert, kann das Ereignis in einem anderen ThreadPool Thread erneut ausgelöst werden. In dieser Situation muss der Ereignishandler eintrittsinvariant sein.
Hinweis
Die Ereignisbehandlungsmethode kann für einen Thread zur gleichen Zeit ausgeführt werden, zu der ein anderer Thread die Stop-Methode aufruft oder die Enabled-Eigenschaft auf false
festlegt. Dies kann dazu führen, dass das Elapsed-Ereignis ausgelöst wird, nachdem der Timer gestoppt wurde. Der Beispielcode für die Stop-Methode zeigt eine Möglichkeit, diese Racebedingung zu vermeiden.
Auch wenn SynchronizingObject nicht null
ist, können Elapsed-Ereignisse auftreten, wenn die Methoden Dispose oder Stop aufgerufen wurden oder die Enabled-Eigenschaft auf false
festgelegt wurde, da das Signal zum Auslösen des Elapsed-Ereignisses für die Ausführung stets in die Warteschlange eines Threadpoolthreads eingereiht wird. Eine Möglichkeit, diese Racebedingung aufzulösen, besteht darin, ein Flag zu setzen, das den Ereignishandler für das Elapsed-Ereignis anweist, nachfolgende Ereignisse zu ignorieren.
Die Timer-Komponente fängt alle Ausnahmen, die von Ereignishandlern für das Elapsed-Ereignis ausgelöst werden, ab und unterdrückt sie. Dieses Verhalten kann sich in zukünftigen Releases von .NET Framework ändern.