次の方法で共有


Timer クラス

ユーザー定義の間隔でイベントを発生させるタイマを実装します。このタイマは、Windows フォーム アプリケーションで使用できるように最適化されていて、ウィンドウで使用する必要があります。

この型のすべてのメンバの一覧については、Timer メンバ を参照してください。

System.Object
   System.MarshalByRefObject
      System.ComponentModel.Component
         System.Windows.Forms.Timer

Public Class Timer
   Inherits Component
[C#]
public class Timer : Component
[C++]
public __gc class Timer : public Component
[JScript]
public class Timer extends Component

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

Timer は、ユーザー定義の間隔でイベントを発生させるために使用されます。この Windows タイマは、UI スレッドを使用して処理を実行するシングルスレッド環境に合わせて設計されています。ユーザー コードには利用できる UI メッセージ ポンプが必要です。また、このコードは必ず同じスレッドから操作し、別のスレッドに対する呼び出しをマーシャリングする必要があります。

このタイマを使用するときは、 Tick イベントを使用して、ポーリング操作を実行するか、スプラッシュ スクリーンを指定した時間だけ表示します。 Enabled プロパティが true に設定され、 Interval プロパティが 0 を超える場合、 Tick イベントは、常に Interval プロパティの設定値に基づいた間隔で発生します。

このクラスには、タイマの間隔、開始および終了を設定するメソッドが用意されています。

使用例

[Visual Basic, C#, C++] 5 秒ごとにアラームを発生させる単純な間隔タイマを実装する例を次に示します。アラームが発生すると、 MessageBox にアラームがアクティブになった回数が表示され、タイマの実行を継続するかどうかをユーザーに問い合わせるメッセージが表示されます。

 
Public Class Class1
    Private Shared myTimer As New System.Windows.Forms.Timer()
    Private Shared alarmCounter As Integer = 1
    Private Shared exitFlag As Boolean = False    
    
    ' This is the method to run when the timer is raised.
    Private Shared Sub TimerEventProcessor(myObject As Object, _
                                           myEventArgs As EventArgs)
        myTimer.Stop()
        
        ' Displays a message box asking whether to continue running the timer.
        If MessageBox.Show("Continue running?", "Count is: " & alarmCounter, _
                            MessageBoxButtons.YesNo) = DialogResult.Yes Then
            ' Restarts the timer and increments the counter.
            alarmCounter += 1
            myTimer.Enabled = True
        Else
            ' Stops the timer.
            exitFlag = True
        End If
    End Sub
    
    Public Shared Sub Main()
        ' Adds the event and the event handler for the method that will
        ' process the timer event to the timer.
        AddHandler myTimer.Tick, AddressOf TimerEventProcessor
        
        ' Sets the timer interval to 5 seconds.
        myTimer.Interval = 5000
        myTimer.Start()
        
        ' Runs the timer, and raises the event.
        While exitFlag = False
            ' Processes all the events in the queue.
            Application.DoEvents()
        End While

    End Sub    

End Class


[C#] 
public class Class1 {
    static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
    static int alarmCounter = 1;
    static bool exitFlag = false;
 
    // This is the method to run when the timer is raised.
    private static void TimerEventProcessor(Object myObject,
                                            EventArgs myEventArgs) {
       myTimer.Stop();
 
       // Displays a message box asking whether to continue running the timer.
       if(MessageBox.Show("Continue running?", "Count is: " + alarmCounter, 
          MessageBoxButtons.YesNo) == DialogResult.Yes) {
          // Restarts the timer and increments the counter.
          alarmCounter +=1;
          myTimer.Enabled = true;
       }
       else {
          // Stops the timer.
          exitFlag = true;
       }
    }
 
    public static int Main() {
       /* Adds the event and the event handler for the method that will 
          process the timer event to the timer. */
       myTimer.Tick += new EventHandler(TimerEventProcessor);
 
       // Sets the timer interval to 5 seconds.
       myTimer.Interval = 5000;
       myTimer.Start();
 
       // Runs the timer, and raises the event.
       while(exitFlag == false) {
          // Processes all the events in the queue.
          Application.DoEvents();
       }
    return 0;
    }
 }
    

[C++] 
public __gc class Class1 {
    static System::Windows::Forms::Timer* myTimer = new System::Windows::Forms::Timer();
    static int alarmCounter = 1;
    static bool exitFlag = false;
 
    // This is the method to run when the timer is raised.
private:
    static void TimerEventProcessor(Object* /*myObject*/,
                                    EventArgs* /*myEventArgs*/) {
       myTimer->Stop();
 
       // Displays a message box asking whether to continue running the timer.
       if(MessageBox::Show(S"Continue running?", String::Format( S"Count is: {0}", __box(alarmCounter)), 
          MessageBoxButtons::YesNo) == DialogResult::Yes) {
          // Restarts the timer and increments the counter.
          alarmCounter +=1;
          myTimer->Enabled = true;
       }
       else {
          // Stops the timer.
          exitFlag = true;
       }
    }
 
public:
    static void Main() {
       /* Adds the event and the event handler for the method that will 
          process the timer event to the timer. */
       myTimer->Tick += new EventHandler(0, TimerEventProcessor);
 
       // Sets the timer interval to 5 seconds.
       myTimer->Interval = 5000;
       myTimer->Start();
 
       // Runs the timer, and raises the event.
       while(exitFlag == false) {
          // Processes all the events in the queue.
          Application::DoEvents();
       }
    }
 };

int main() {
    Class1::Main();
}    

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Windows.Forms

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: System.Windows.Forms (System.Windows.Forms.dll 内)

参照

Timer メンバ | System.Windows.Forms 名前空間