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イベント (2,000 ミリ秒単位)、2 秒間隔が、イベントのイベント ハンドラーを設定し、タイマーを開始します。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を使用して 1 回だけまたは繰り返しイベントを発生させるオブジェクト、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. 直接的に型を破棄するには、try / catch ブロック内で Dispose メソッドを呼び出します。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に設定されているfalseSystem.Timers.Timerオブジェクト、Elapsedイベント 1 回だけで、最初より後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設定AutoResettrue、これは、既定値。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. ただし、非同期的に実行とそのイベント ハンドラーの場合は true ではないこと、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プロパティはnullElapsedイベントの発生を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.

注意

イベント処理メソッドが 1 つのスレッドを別のスレッドを呼び出すのと同時実行、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メソッドは、この競合状態を回避するために 1 つのメソッドを示しています。The example code for the Stop method shows one way to avoid this race condition.

場合でもSynchronizingObjectないnullElapsed後にイベントを発生させる、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. この競合状態がのイベント ハンドラーを示すフラグを設定するには解決するのには 1 つのメソッド、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クラス、フォームやそのユーザー インターフェイス要素に、タイマーをかけることがなく、コントロールなどのユーザー インターフェイス要素に割り当てるフォームまたはコントロールを含む、TimerSynchronizingObjectプロパティ、イベントが実行されるようユーザー インターフェイス スレッドにマーシャ リングします。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 がという名前の 4 つのクラスが含まれることに注意してください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: 定期的な間隔でスレッド プールのスレッドで 1 つのコールバック メソッドを実行します。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クラスでは、このクラスは、マルチ スレッド環境でサーバー ベースまたはサービス コンポーネントとして使用するためです。 ユーザー インターフェイスを持たないは実行時に表示されません。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 フォーム コンポーネントを一定の間隔でイベントを発生させます。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 のみ): 一定の間隔で非同期または同期の web ページのポストバックを実行する 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

TimerElapsed イベントを一度のみ発生させる (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

TimerElapsed イベントを発生させる必要があるかどうかを示す値を取得または設定します。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()

Enabledtrue に設定して、Elapsed イベントの発生を開始します。Starts raising the Elapsed event by setting Enabled to true.

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

Enabledfalse に設定して、Elapsed イベントの発生を停止します。Stops raising the Elapsed event by setting Enabled to false.

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

Component の名前 (存在する場合) を格納する String を返します。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.

こちらもご覧ください