方法: Windows フォームの Timer コンポーネントを使用して一定間隔でプロシージャを実行するHow to: Run Procedures at Set Intervals with the Windows Forms Timer Component

ループが完了するまで特定の間隔で実行するプロシージャや、設定した間隔が経過した時点で実行するプロシージャを作成することがあるかもしれません。You might sometimes want to create a procedure that runs at specific time intervals until a loop has finished or that runs when a set time interval has elapsed. Timer コンポーネントにより、このようなプロシージャが可能になります。The Timer component makes such a procedure possible.

このコンポーネントは、Windows フォームの環境用に設計されています。This component is designed for a Windows Forms environment. サーバー環境に適したタイマーが必要な場合は、「サーバー ベースのタイマーの概要」を参照してください。If you need a timer that is suitable for a server environment, see Introduction to Server-Based Timers.

注意

Timer コンポーネントを使用する場合に、いくつかの制限があります。There are some limitations when using the Timer component. 詳細については、次を参照してください。 、Windows フォームの Timer コンポーネントの Interval プロパティの制限事項します。For more information, see Limitations of the Windows Forms Timer Component's Interval Property.

Timer コンポーネントで設定された間隔でプロシージャを実行するにはTo run a procedure at set intervals with the Timer component

  1. Timer をフォームに追加します。Add a Timer to your form. プログラムでこれを実行する方法については、次の例のセクションを参照してください。See the following Example section for an illustration of how to do this programmatically. Visual Studio では、コンポーネントをフォームに追加することもあります。Visual Studio also has support for adding components to a form. 参照してください方法。Windows フォームにユーザー インターフェイスを持たないコントロールを追加します。Also see How to: Add Controls Without a User Interface to Windows Forms.

  2. タイマーの Interval プロパティ (ミリ秒) を設定します。Set the Interval property (in milliseconds) for the timer. このプロパティは、プロシージャを再度実行する前に、経過する時間の長さを決定します。This property determines how much time will pass before the procedure is run again.

    注意

    タイマー イベントの発生頻度が高いと、イベントに対応するときに使用されるプロセッサ時間も長くなります。The more often a timer event occurs, the more processor time is used in responding to the event. これにより、全体的なパフォーマンスが低下します。This can slow down overall performance. 必要な間隔よりも小さな値を設定しないでください。Do not set a smaller interval than you need.

  3. Tick イベント ハンドラーで適切なコードを作成します。Write appropriate code in the Tick event handler. このイベントで記述したコードは、Interval プロパティで指定した間隔で実行されます。The code you write in this event will run at the interval specified in the Interval property.

  4. Enabled プロパティを true に設定して、タイマーを開始します。Set the Enabled property to true to start the timer. Tick イベントの発生が開始され、プロシージャが指定された間隔で実行されます。The Tick event will begin to occur, running your procedure at the set interval.

  5. 適切なタイミングで Enabled プロパティを false に設定し、プロシージャがもう一度実行されることがないようにします。At the appropriate time, set the Enabled property to false to stop the procedure from running again. 間隔を設定0タイマーを停止するには発生しません。Setting the interval to 0 does not cause the timer to stop.

Example

この最初のコード例は、1 秒単位で 1 日の時間を追跡します。This first code example tracks the time of day in one-second increments. フォーム上で ButtonLabel、および Timer コンポーネントを使用します。It uses a Button, a Label, and a Timer component on a form. Interval プロパティが 1000 (1 秒に等しい) に設定されます。The Interval property is set to 1000 (equal to one second). Tick イベントで、ラベルのキャプションが現在の時刻に設定されます。In the Tick event, the label's caption is set to the current time. ボタンをクリックしたときに、Enabled プロパティが false に設定されると、タイマーがラベルのキャプションを更新しなくなります。When the button is clicked, the Enabled property is set to false, stopping the timer from updating the label's caption. 次のコード例では、使用して、フォームが必要です、Buttonという名前のコントロールButton1Timerという名前のコントロールTimer1、およびLabelという名前のコントロールLabel1します。The following code example requires that you have a form with a Button control named Button1, a Timer control named Timer1, and a Label control named Label1.

Private Sub InitializeTimer()  
   ' Run this procedure in an appropriate event.  
   ' Set to 1 second.  
   Timer1.Interval = 1000  
   ' Enable timer.  
   Timer1.Enabled = True  
   Button1.Text = "Enabled"  
End Sub  
x  
Private Sub Timer1_Tick(ByVal Sender As Object, ByVal e As EventArgs) Handles Timer1.Tick  
' Set the caption to the current time.  
   Label1.Text = DateTime.Now  
End Sub  
  
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  
      If Button1.Text = "Stop" Then  
         Button1.Text = "Start"  
         Timer1.Enabled = False  
      Else  
         Button1.Text = "Stop"  
         Timer1.Enabled = True  
      End If  
End Sub  
private void InitializeTimer()  
{  
    // Call this procedure when the application starts.  
    // Set to 1 second.  
    Timer1.Interval = 1000;  
    Timer1.Tick += new EventHandler(Timer1_Tick);  
  
    // Enable timer.  
    Timer1.Enabled = true;  
  
    Button1.Text = "Stop";  
    Button1.Click += new EventHandler(Button1_Click);  
}  
  
private void Timer1_Tick(object Sender, EventArgs e)     
{  
   // Set the caption to the current time.  
   Label1.Text = DateTime.Now.ToString();  
}  
  
private void Button1_Click(object sender, EventArgs e)  
{  
  if ( Button1.Text == "Stop" )  
  {  
    Button1.Text = "Start";  
    Timer1.Enabled = false;  
  }  
  else  
  {  
    Button1.Text = "Stop";  
    Timer1.Enabled = true;  
  }  
}  
private:  
   void InitializeTimer()  
   {  
      // Run this procedure in an appropriate event.  
      // Set to 1 second.  
      timer1->Interval = 1000;  
      // Enable timer.  
      timer1->Enabled = true;  
      this->timer1->Tick += gcnew System::EventHandler(this,    
                               &Form1::timer1_Tick);  
  
      button1->Text = S"Stop";  
      this->button1->Click += gcnew System::EventHandler(this,   
                               &Form1::button1_Click);  
   }  
  
   void timer1_Tick(System::Object ^ sender,  
      System::EventArgs ^ e)  
   {  
      // Set the caption to the current time.  
      label1->Text = DateTime::Now.ToString();  
   }  
  
   void button1_Click(System::Object ^ sender,  
      System::EventArgs ^ e)  
   {  
      if ( button1->Text == "Stop" )  
      {  
         button1->Text = "Start";  
         timer1->Enabled = false;  
      }  
      else  
      {  
         button1->Text = "Stop";  
         timer1->Enabled = true;  
      }  
   }  

Example

この 2 つ目のコード例は、ループが終了するまでにプロシージャを 600 ミリ秒ごとに実行します。This second code example runs a procedure every 600 milliseconds until a loop has finished. 次のコード例では、使用して、フォームが必要です、Buttonという名前のコントロールButton1Timerという名前のコントロールTimer1、およびLabelという名前のコントロールLabel1します。The following code example requires that you have a form with a Button control named Button1, a Timer control named Timer1, and a Label control named Label1.

' This variable will be the loop counter.  
Private counter As Integer  
  
Private Sub InitializeTimer()  
   ' Run this procedure in an appropriate event.  
   counter = 0  
   Timer1.Interval = 600  
   Timer1.Enabled = True  
End Sub  
  
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick  
   If counter => 10 Then  
      ' Exit loop code.  
      Timer1.Enabled = False  
      counter = 0  
   Else  
      ' Run your procedure here.  
      ' Increment counter.  
      counter = counter + 1  
      Label1.Text = "Procedures Run: " & counter.ToString  
   End If  
End Sub  
// This variable will be the loop counter.  
private int counter;  
  
private void InitializeTimer()  
{  
   // Run this procedure in an appropriate event.  
   counter = 0;  
   timer1.Interval = 600;  
   timer1.Enabled = true;  
   // Hook up timer's tick event handler.  
   this.timer1.Tick += new System.EventHandler(this.timer1_Tick);  
}  
  
private void timer1_Tick(object sender, System.EventArgs e)     
{  
   if (counter >= 10)   
   {  
      // Exit loop code.  
      timer1.Enabled = false;  
      counter = 0;  
   }  
   else  
   {  
      // Run your procedure here.  
      // Increment counter.  
      counter = counter + 1;  
      label1.Text = "Procedures Run: " + counter.ToString();  
      }  
}  
private:  
   int counter;  
  
   void InitializeTimer()  
   {  
      // Run this procedure in an appropriate event.  
      counter = 0;  
      timer1->Interval = 600;  
      timer1->Enabled = true;  
      // Hook up timer's tick event handler.  
      this->timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick);  
   }  
  
   void timer1_Tick(System::Object ^ sender,  
      System::EventArgs ^ e)  
   {  
      if (counter >= 10)   
      {  
         // Exit loop code.  
         timer1->Enabled = false;  
         counter = 0;  
      }  
      else  
      {  
         // Run your procedure here.  
         // Increment counter.  
         counter = counter + 1;  
         label1->Text = String::Concat("Procedures Run: ",  
            counter.ToString());  
      }  
   }  

関連項目See also