Condividi tramite


Timer.Elapsed Evento

Definizione

Si verifica quando l'intervallo è trascorso.

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 

Tipo evento

Attributi

Esempio

Nell'esempio seguente viene creata un'istanza di un Timer oggetto che genera l'evento Timer.Elapsed ogni due secondi (2000 millisecondi), configura un gestore eventi per l'evento e avvia il timer. Il gestore eventi visualizza il valore della ElapsedEventArgs.SignalTime proprietà ogni volta che viene generato.

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

Commenti

L'evento Elapsed viene generato se la Enabled proprietà è true e l'intervallo di tempo (in millisecondi) definito dalla Interval proprietà trascorsa. Se la AutoReset proprietà è true, l'evento viene generato ripetutamente a un intervallo definito dalla Interval proprietà; in caso contrario, l'evento viene generato una sola volta, la prima volta che il Interval valore viene trascorso.

Se Interval è impostato dopo l'avvio Timer di , il conteggio viene reimpostato. Ad esempio, se si imposta l'intervallo su 5 secondi e quindi si imposta su Enabledtrue, il conteggio inizia al momento Enabled dell'impostazione. Se si reimposta l'intervallo su 10 secondi quando il conteggio è di 3 secondi, l'evento viene generato per la prima volta 13 secondi dopo Enabled l'impostazione Elapsed su true.

Se la SynchronizingObject proprietà è null, l'evento Elapsed viene generato in un ThreadPool thread. Se l'elaborazione dell'evento Elapsed dura più a lungo di Interval, l'evento potrebbe essere generato di nuovo in un altro ThreadPool thread. In questa situazione, il gestore eventi deve essere reinserito.

Annotazioni

Il metodo di gestione degli eventi può essere eseguito in un thread contemporaneamente a un altro thread che chiama il Stop metodo o imposta la Enabled proprietà su false. Ciò potrebbe comportare la generazione dell'evento dopo l'arresto Elapsed del timer. Il codice di esempio per il Stop metodo mostra un modo per evitare questa race condition.

Anche se SynchronizingObject non nullè , Elapsed gli eventi possono verificarsi dopo che il metodo o Stop è stato chiamato o dopo che la Enabled proprietà è stata impostata su false, perché il segnale per generare l'evento viene sempre accodato per l'esecuzione DisposeElapsed in un thread del pool di thread. Un modo per risolvere questa race condition consiste nell'impostare un flag che indica al gestore eventi per l'evento Elapsed di ignorare gli eventi successivi.

Il Timer componente intercetta e elimina tutte le eccezioni generate dai gestori eventi per l'evento Elapsed . Questo comportamento è soggetto a modifiche nelle versioni future di .NET Framework.

Si applica a

Vedi anche