Timer Timer Timer Timer Class

Определение

Создает событие после заданного интервала с возможностью создания повторяющихся событий.Generates an event after a set interval, with an option to generate recurring events.

public ref class Timer : System::ComponentModel::Component, System::ComponentModel::ISupportInitialize
public class Timer : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
type Timer = class
    inherit Component
    interface ISupportInitialize
Public Class Timer
Inherits Component
Implements ISupportInitialize
Наследование
Реализации

Примеры

В следующем примере создается System.Timers.Timer объект, который запускает его Timer.Elapsed событий каждые две секунды (2000 миллисекунд), настраивает обработчик событий для события и запускает таймер.The following example instantiates a System.Timers.Timer object that fires its Timer.Elapsed event every two seconds (2,000 milliseconds), sets up an event handler for the event, and starts the timer. Обработчик событий отображает значение ElapsedEventArgs.SignalTime свойство каждый раз, он вызывается.The event handler displays the value of the ElapsedEventArgs.SignalTime property each time it is raised.

using System;
using System.Timers;

public class Example
{
   private static System.Timers.Timer aTimer;
   
   public static void Main()
   {
      SetTimer();

      Console.WriteLine("\nPress the Enter key to exit the application...\n");
      Console.WriteLine("The application started at {0:HH:mm:ss.fff}", DateTime.Now);
      Console.ReadLine();
      aTimer.Stop();
      aTimer.Dispose();
      
      Console.WriteLine("Terminating the application...");
   }

   private static void SetTimer()
   {
        // Create a timer with a two second interval.
        aTimer = new System.Timers.Timer(2000);
        // Hook up the Elapsed event for the timer. 
        aTimer.Elapsed += OnTimedEvent;
        aTimer.AutoReset = true;
        aTimer.Enabled = true;
    }

    private static void OnTimedEvent(Object source, ElapsedEventArgs e)
    {
        Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",
                          e.SignalTime);
    }
}
// The example displays output like the following:
//       Press the Enter key to exit the application...
//
//       The application started at 09:40:29.068
//       The Elapsed event was raised at 09:40:31.084
//       The Elapsed event was raised at 09:40:33.100
//       The Elapsed event was raised at 09:40:35.100
//       The Elapsed event was raised at 09:40:37.116
//       The Elapsed event was raised at 09:40:39.116
//       The Elapsed event was raised at 09:40:41.117
//       The Elapsed event was raised at 09:40:43.132
//       The Elapsed event was raised at 09:40:45.133
//       The Elapsed event was raised at 09:40:47.148
//
//       Terminating the application...
Imports System.Timers

Public Module Example
    Private aTimer As System.Timers.Timer

    Public Sub Main()
        SetTimer()

      Console.WriteLine("{0}Press the Enter key to exit the application...{0}",
                        vbCrLf)
      Console.WriteLine("The application started at {0:HH:mm:ss.fff}",
                        DateTime.Now)
      Console.ReadLine()
      aTimer.Stop()
      aTimer.Dispose()

      Console.WriteLine("Terminating the application...")
    End Sub

    Private Sub SetTimer()
        ' Create a timer with a two second interval.
        aTimer = New System.Timers.Timer(2000)
        ' Hook up the Elapsed event for the timer. 
        AddHandler aTimer.Elapsed, AddressOf OnTimedEvent
        aTimer.AutoReset = True
        aTimer.Enabled = True
    End Sub

    ' The event handler for the Timer.Elapsed event. 
    Private Sub OnTimedEvent(source As Object, e As ElapsedEventArgs)
        Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",
                          e.SignalTime)
    End Sub 
End Module
' The example displays output like the following:
'       Press the Enter key to exit the application...
'
'       The application started at 09:40:29.068
'       The Elapsed event was raised at 09:40:31.084
'       The Elapsed event was raised at 09:40:33.100
'       The Elapsed event was raised at 09:40:35.100
'       The Elapsed event was raised at 09:40:37.116
'       The Elapsed event was raised at 09:40:39.116
'       The Elapsed event was raised at 09:40:41.117
'       The Elapsed event was raised at 09:40:43.132
'       The Elapsed event was raised at 09:40:45.133
'       The Elapsed event was raised at 09:40:47.148
'
'       Terminating the application...

Комментарии

Timer Компонент является серверным таймер, который вызывает Elapsed событие в приложении после количество миллисекунд в Interval свойстве.The Timer component is a server-based timer that raises an Elapsed event in your application after the number of milliseconds in the Interval property has elapsed. Можно настроить Timer объекта, чтобы создать событие, используя только один раз или неоднократно AutoReset свойство.You can configure the Timer object to raise the event just once or repeatedly using the AutoReset property. Как правило Timer объект объявлен на уровне класса, чтобы оно оставалось в области до тех пор, пока он необходим.Typically, a Timer object is declared at the class level so that it stays in scope as long as it is needed. Затем можно обработать его Elapsed событие, чтобы обеспечить обработку.You can then handle its Elapsed event to provide regular processing. Например, предположим, у вас есть важный сервер, который должен храниться 24 часа в сутки, 7 дней в неделю.For example, suppose you have a critical server that must be kept running 24 hours a day, 7 days a week. Можно создать службу, использующую Timer объект, который периодически Проверьте сервер и убедитесь, что система приступить к работе.You could create a service that uses a Timer object to periodically check the server and ensure that the system is up and running. Если система не отвечает, служба может попытаться перезапустить сервер или уведомить администратора.If the system is not responding, the service could attempt to restart the server or notify an administrator.

Важно!

Timer Класс доступен не для всех реализаций .NET и версий, включая .NET Standard 1.6 и более ранние версии.The Timer class is not available for all .NET implementations and versions, such as .NET Standard 1.6 and lower versions. В таких случаях можно использовать System.Threading.Timer вместо этого класса.In these cases, you can use the System.Threading.Timer class instead.

Этот тип реализует IDisposable интерфейс.This type implements the IDisposable interface. Когда вы закончите, используя тип, следует освободить его прямо или косвенно.When you have finished using the type, you should dispose of it either directly or indirectly. Чтобы удалить тип напрямую, вызовите его Dispose метод в try / catch блока.To dispose of the type directly, call its Dispose method in a try/catch block. Чтобы избавиться от его косвенно, используйте языковой конструкции, такие как using (в C#) или Using (в Visual Basic).To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Дополнительные сведения см. в разделе «С помощью объекта, реализует IDisposable» IDisposable разделу интерфейса.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

Сервер под управлением System.Timers.Timer класс предназначен для использования с рабочими потоками в многопоточной среде.The server-based System.Timers.Timer class is designed for use with worker threads in a multithreaded environment. Серверные таймеры могут перемещаться между потоками для обработки возникающих Elapsed событие, приводит к более высокой точностью, чем Windows таймеров в вызове событий по времени.Server timers can move among threads to handle the raised Elapsed event, resulting in more accuracy than Windows timers in raising the event on time.

System.Timers.Timer Компонент создает Elapsed события, в зависимости от значение (в миллисекундах) Interval свойство.The System.Timers.Timer component raises the Elapsed event, based on the value (in milliseconds) of the Interval property. Можно обработать это событие для выполнения обработки, что нужно.You can handle this event to perform the processing you need. Например предположим, что у вас есть приложение электронной коммерции, постоянно отправляет заказы на продажу в базу данных.For example, suppose that you have an online sales application that continuously posts sales orders to a database. Служба, составляющая инструкции по доставке обрабатывает пакет заказов, а не по отдельности.The service that compiles the instructions for shipping operates on a batch of orders rather than processing each order individually. Можно использовать Timer для запуска пакетной обработки каждые 30 минут.You could use a Timer to start the batch processing every 30 minutes.

Важно!

Класс System.Timers.Timer имеет тем же разрешением, что системные часы.The System.Timers.Timer class has the same resolution as the system clock. Это означает, что Elapsed событие будет срабатывать с интервалом, заданным путем разрешения системных часов, если Interval меньшим, чем разрешение системных часов.This means that the Elapsed event will fire at an interval defined by the resolution of the system clock if the Interval property is less than the resolution of the system clock. Дополнительные сведения см. в описании свойства Interval.For more information, see the Interval property.

При AutoReset присваивается false, System.Timers.Timer объекта вызывает Elapsed событий однократно, после первого Interval истечет.When AutoReset is set to false, a System.Timers.Timer object raises the Elapsed event only once, after the first Interval has elapsed. Чтобы поддерживать вызов Elapsed событий регулярно через интервал, указанный по Interval, задайте AutoReset для true, который является значением по умолчанию.To keep raising the Elapsed event regularly at the interval defined by the Interval, set AutoReset to true, which is the default value.

Timer Компонент перехватывает и подавляет все исключения, создаваемые обработчики событий для Elapsed событий.The Timer component catches and suppresses all exceptions thrown by event handlers for the Elapsed event. Это поведение будет изменено в будущих выпусков платформы .NET Framework.This behavior is subject to change in future releases of the .NET Framework. Обратите внимание, что это не относится обработчиков событий, которые выполняются асинхронно и включают await оператора (в C#) или Await оператора (в Visual Basic).Note, however, that this is not true of event handlers that execute asynchronously and include the await operator (in C#) or the Await operator (in Visual Basic). Исключения, возникшие в эти обработчики событий, распространяются обратно в вызывающий поток, как показано в следующем примере.Exceptions thrown in these event handlers are propagated back to the calling thread, as the following example illustrates. Дополнительные сведения об исключениях, порожденных в асинхронных методах см. в разделе обработка исключений.For more information on exceptions thrown in asynchronous methods, see Exception Handling.

using System;
using System.Threading.Tasks;
using System.Timers;

class Example
{
   static void Main()
   {
      Timer timer = new Timer(1000);
      timer.Elapsed += async ( sender, e ) => await HandleTimer();
      timer.Start();
      Console.Write("Press any key to exit... ");
      Console.ReadKey();
   }

   private static Task HandleTimer()
   {
     Console.WriteLine("\nHandler not implemented..." );
     throw new NotImplementedException();
   }
}
// The example displays output like the following:
//   Press any key to exit...
//   Handler not implemented...
//   
//   Unhandled Exception: System.NotImplementedException: The method or operation is not implemented.
//      at Example.HandleTimer()
//      at Example.<<Main>b__0>d__2.MoveNext()
//   --- End of stack trace from previous location where exception was thrown ---
//      at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c__DisplayClass2.<ThrowAsync>b__5(Object state)
//      at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
//      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
//      at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
//      at System.Threading.ThreadPoolWorkQueue.Dispatch()
Imports System.Threading.Tasks
Imports System.Timers

Public Module Example
   Public Sub Main()
      Dim timer As New Timer(1000)  
      AddHandler timer.Elapsed, AddressOf Example.HandleTimer     
      'timer.Elapsed = Async ( sender, e ) => await HandleTimer()
      timer.Start()
      Console.Write("Press any key to exit... ")
      Console.ReadKey()
   End Sub

   Private Async Sub HandleTimer(sender As Object, e As EventArgs)
      Await Task.Run(Sub()
                        Console.WriteLine()
                        Console.WriteLine("Handler not implemented..." )
                        Throw New NotImplementedException()
                     End Sub)   
   End Sub
End Module
' The example displays output like the following:
'   Press any key to exit...
'   Handler not implemented...
'   
'   Unhandled Exception: System.NotImplementedException: The method or operation is not implemented.
'      at Example._Lambda$__1()
'      at System.Threading.Tasks.Task.Execute()
'   --- End of stack trace from previous location where exception was thrown ---
'      at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
'      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
'      at Example.VB$StateMachine_0_HandleTimer.MoveNext()
'   --- End of stack trace from previous location where exception was thrown ---
'      at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c__DisplayClass2.<ThrowAsync>b__5(Object state)
'      at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
'      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
'      at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
'      at System.Threading.ThreadPoolWorkQueue.Dispatch()

Если SynchronizingObject свойство null, Elapsed событие ThreadPool потока.If the SynchronizingObject property is null, the Elapsed event is raised on a ThreadPool thread. Если обработка Elapsed событие продолжается дольше Interval, событие может вызываться снова на другом ThreadPool потока.If processing of the Elapsed event lasts longer than Interval, the event might be raised again on another ThreadPool thread. В этом случае обработчик событий должен быть реентерабельным.In this situation, the event handler should be reentrant.

Примечание

Метод обработки событий может выполняться в одном потоке, в то же время, другой поток вызывает Stop метода или наборы Enabled свойства false.The event-handling method might run on one thread at the same time that another thread calls the Stop method or sets the Enabled property to false. Это может привести к Elapsed события после остановки таймера.This might result in the Elapsed event being raised after the timer is stopped. Пример кода для Stop метод показан один из способов избежать состояния гонок.The example code for the Stop method shows one way to avoid this race condition.

Даже если SynchronizingObject не null, Elapsed события могут происходить после Dispose или Stop был вызван метод или после Enabled было присвоено свойство false, так как сигнал для вызова Elapsed событий всегда помещается в очередь для выполнения в потоке пула потоков.Even if SynchronizingObject is not null, Elapsed events can occur after the Dispose or Stop method has been called or after the Enabled property has been set to false, because the signal to raise the Elapsed event is always queued for execution on a thread pool thread. Один из способов устранения такого состояния гонки является установить флаг, который указывает обработчику событий для Elapsed событие, чтобы игнорировать последующие события.One way to resolve this race condition is to set a flag that tells the event handler for the Elapsed event to ignore subsequent events.

Если вы используете System.Timers.Timer класс с элементом пользовательского интерфейса, таких как формы или элемента управления, не помещая таймер этого элемента пользовательского интерфейса, назначить форму или элемент управления, содержащий Timer для SynchronizingObject свойство, таким образом, событие маршалинг в поток интерфейса пользователя.If you use the System.Timers.Timer class with a user interface element, such as a form or control, without placing the timer on that user interface element, assign the form or control that contains the Timer to the SynchronizingObject property, so that the event is marshaled to the user interface thread.

Список значений свойства по умолчанию для экземпляра Timer, см. в разделе Timer конструктор.For a list of default property values for an instance of Timer, see the Timer constructor.

Совет

Имейте в виду, что .NET включает четыре класса с именем Timer, каждый из который предлагает различные функциональные возможности:Be aware that .NET includes four classes named Timer, each of which offers different functionality:

  • System.Timers.Timer (этот раздел): вызывает событие через определенные интервалы.System.Timers.Timer (this topic): fires an event at regular intervals. Класс предназначен для использования в качестве сервера под управлением или компонента службы в многопоточной среде; он нет пользовательского интерфейса и не отображается во время выполнения.The class is intended for use as a server-based or service component in a multithreaded environment; it has no user interface and is not visible at runtime.
  • System.Threading.Timer: выполняет метод одного ответного вызова пула потоков с регулярными интервалами.System.Threading.Timer: executes a single callback method on a thread pool thread at regular intervals. Метод обратного вызова определяется в том случае, когда таймер создается и не может быть изменено.The callback method is defined when the timer is instantiated and cannot be changed. Как и System.Timers.Timer класса, этот класс предназначен для использования в качестве компонента server или службы в многопоточной среде; у него отсутствует интерфейс пользователя, который не отображается во время выполнения.Like the System.Timers.Timer class, this class is intended for use as a server-based or service component in a multithreaded environment; it has no user interface and is not visible at runtime.
  • System.Windows.Forms.Timer (Только для .NET framework): это компонент Windows Forms, который вызывает событие через определенные интервалы.System.Windows.Forms.Timer (.NET Framework only): a Windows Forms component that fires an event at regular intervals. У этого компонента нет интерфейса пользователя. Он предназначен для однопоточной среды.The component has no user interface and is designed for use in a single-threaded environment.
  • System.Web.UI.Timer (Только для .NET framework): компонент ASP.NET, выполняющий обратную передачу асинхронный или синхронный веб-страницы с регулярным интервалом.System.Web.UI.Timer (.NET Framework only): an ASP.NET component that performs asynchronous or synchronous web page postbacks at a regular interval.

Конструкторы

Timer() Timer() Timer() Timer()

Инициализирует новый экземпляр класса Timer и задает всем свойствам начальные значения.Initializes a new instance of the Timer class, and sets all the properties to their initial values.

Timer(Double) Timer(Double) Timer(Double) Timer(Double)

Инициализирует новый экземпляр класса Timer и задает свойству Interval указанное значение в миллисекундах.Initializes a new instance of the Timer class, and sets the Interval property to the specified number of milliseconds.

Свойства

AutoReset AutoReset AutoReset AutoReset

Возвращает или задает логическое значение, определяющее, должен ли объект Timer вызывать событие Elapsed один раз (false) или неоднократно (true).Gets or sets a Boolean indicating whether the Timer should raise the Elapsed event only once (false) or repeatedly (true).

CanRaiseEvents CanRaiseEvents CanRaiseEvents CanRaiseEvents

Возвращает значение, показывающее, может ли компонент вызывать событие.Gets a value indicating whether the component can raise an event.

(Inherited from Component)
Container Container Container Container

Возвращает контейнер IContainer, содержащий компонент Component.Gets the IContainer that contains the Component.

(Inherited from Component)
DesignMode DesignMode DesignMode DesignMode

Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время.Gets a value that indicates whether the Component is currently in design mode.

(Inherited from Component)
Enabled Enabled Enabled Enabled

Возвращает или задает значение, определяющее, должен ли объект Timer вызывать событие Elapsed.Gets or sets a value indicating whether the Timer should raise the Elapsed event.

Events Events Events Events

Возвращает список обработчиков событий, которые прикреплены к этому объекту Component.Gets the list of event handlers that are attached to this Component.

(Inherited from Component)
Interval Interval Interval Interval

Возвращает или задает интервал в миллисекундах, по истечении которого возникает событие Elapsed.Gets or sets the interval, expressed in milliseconds, at which to raise the Elapsed event.

Site Site Site Site

Возвращает или задает сайт, который привязывает Timer к его контейнеру в режиме конструктора.Gets or sets the site that binds the Timer to its container in design mode.

SynchronizingObject SynchronizingObject SynchronizingObject SynchronizingObject

Получает или задает объект, используемый для маршалирования вызовов обработчика событий, осуществленных после истечения интервала времени.Gets or sets the object used to marshal event-handler calls that are issued when an interval has elapsed.

Методы

BeginInit() BeginInit() BeginInit() BeginInit()

Начинает во время выполнения инициализацию класса Timer, используемого в форме или другим компонентом.Begins the run-time initialization of a Timer that is used on a form or by another component.

Close() Close() Close() Close()

Освобождает ресурсы, используемые объектом Timer.Releases the resources used by the Timer.

CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type)

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Inherited from MarshalByRefObject)
Dispose() Dispose() Dispose() Dispose()

Освобождает все ресурсы, занятые модулем Component.Releases all resources used by the Component.

(Inherited from Component)
Dispose(Boolean) Dispose(Boolean) Dispose(Boolean) Dispose(Boolean)

Освобождает все ресурсы, используемые текущим объектом Timer.Releases all resources used by the current Timer.

EndInit() EndInit() EndInit() EndInit()

Заканчивает во время выполнения инициализацию класса Timer, используемого в форме или другим компонентом.Ends the run-time initialization of a Timer that is used on a form or by another component.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Inherited from Object)
GetLifetimeService() GetLifetimeService() GetLifetimeService() GetLifetimeService()

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
GetService(Type) GetService(Type) GetService(Type) GetService(Type)

Возвращает объект, представляющий службу, обеспечиваемую компонентом Component или его контейнером Container.Returns an object that represents a service provided by the Component or by its Container.

(Inherited from Component)
GetType() GetType() GetType() GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Inherited from Object)
InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService()

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.Obtains a lifetime service object to control the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)
MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean)

Создает неполную копию текущего объекта MarshalByRefObject.Creates a shallow copy of the current MarshalByRefObject object.

(Inherited from MarshalByRefObject)
Start() Start() Start() Start()

Начинает вызывать событие Elapsed, задавая для свойства Enabled значение true.Starts raising the Elapsed event by setting Enabled to true.

Stop() Stop() Stop() Stop()

Прекращает вызывать событие Elapsed, задавая для свойства Enabled значение false.Stops raising the Elapsed event by setting Enabled to false.

ToString() ToString() ToString() ToString()

Возвращает объект String, содержащий имя Component, если оно есть.Returns a String containing the name of the Component, if any. Этот метод не следует переопределять.This method should not be overridden.

(Inherited from Component)

События

Disposed Disposed Disposed Disposed

Происходит при удалении компонента вызовом метода Dispose().Occurs when the component is disposed by a call to the Dispose() method.

(Inherited from Component)
Elapsed Elapsed Elapsed Elapsed

Происходит по истечении интервала времени.Occurs when the interval elapses.

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

Потокобезопасность

Любые открытые static члены этого типа являются потокобезопасными.Any public static members of this type are thread safe. Потокобезопасность членов экземпляров не гарантируется.Any instance members are not guaranteed to be thread safe.

Дополнительно