Прочитать на английском

Поделиться через


ElapsedEventArgs.SignalTime Свойство

Определение

Получает дату и время возникновения события Elapsed.

C#
public DateTime SignalTime { get; }

Значение свойства

Время возникновения события Elapsed.

Примеры

В следующем примере создается Timer экземпляр объекта , который запускает свое Timer.Elapsed событие каждые две секунды (2000 миллисекунд), настраивает обработчик событий для события и запускает таймер. Обработчик событий отображает значение ElapsedEventArgs.SignalTime свойства при каждом его вызове.

C#
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

Комментарии

Событие Timer.Elapsed возникает в потоке ThreadPool , поэтому метод обработки событий может выполняться в одном потоке одновременно с Timer.Stop вызовом метода в другом потоке. Это может привести к возникновению Elapsed события после Stop вызова метода . Это состояние гонки не может быть предотвращено путем простого сравнения SignalTime свойства со временем Stop вызова метода, так как метод обработки событий может уже выполняться при Stop вызове метода или может начать выполнение между моментом Stop вызова метода и моментом сохранения времени остановки. Если крайне важно предотвратить продолжение потока, который вызывает Stop метод, пока метод обработки событий все еще выполняется, используйте более надежный механизм синхронизации, такой как Monitor класс или CompareExchange метод . Код, использующий CompareExchange метод , можно найти в примере для Timer.Stop метода .

Применяется к

Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

См. также раздел