サーチ…


構文

  • myTimer.Interval - 「Tick」イベントが呼び出される頻度をミリ秒単位で設定します。
  • myTimer.Enabled - タイマを有効/無効にするブール値
  • myTimer.Start() - タイマーを開始します。
  • myTimer.Stop() - タイマーを停止します。

備考

Visual Studioを使用している場合は、ツールボックスからフォームに直接タイマーをコントロールとして追加できます。

マルチスレッドタイマ

System.Threading.Timer - 最も単純なマルチスレッドタイマー。 2つのメソッドと1つのコンストラクタが含まれます。

例:タイマーはDataWriteメソッドを呼び出します。このメソッドは、5秒後に「マルチスレッドが実行されました...」と書き込まれ、その後、ユーザーがEnterキーを押すまで1秒ごとに1秒ごとに書き込みます。

using System;
using System.Threading;
class Program
{
  static void Main()
  {
    // First interval = 5000ms; subsequent intervals = 1000ms
    Timer timer = new Timer (DataWrite, "multithread executed...", 5000, 1000);
    Console.ReadLine();
    timer.Dispose(); // This both stops the timer and cleans up.
  }

  static void DataWrite (object data)
  {
    // This runs on a pooled thread
    Console.WriteLine (data); // Writes "multithread executed..."
  }
}

注:マルチスレッドタイマーを廃棄するための別のセクションを投稿します。

Change - このメソッドは、タイマーの間隔を変更するときに呼び出すことができます。

Timeout.Infinite - 1回だけ発射したい場合。これをコンストラクタの最後の引数で指定します。

System.Timers - .NET Frameworkによって提供される別のタイマークラス。これは、 System.Threading.TimerラップしSystem.Threading.Timer

特徴:

  • IComponent - Visual Studioのデザイナーのコンポーネントトレイに配置できるようにする
  • ChangeメソッドではなくIntervalプロパティ
  • コールバックdelegate代わりにElapsed event
  • タイマーを開始および停止するEnabledプロパティー( default value = false
  • Enabledプロパティ(上記のポイント)で混乱した場合に備えて、 StartStopメソッド
  • AutoReset - 定期的なイベントを示すため( default value = true
  • WPF要素とWindowsフォームコントロール上のメソッドを安全に呼び出すためのInvokeメソッドとBeginInvokeメソッドとのSynchronizingObjectプロパティ

上記のすべての機能を表す例:

using System;
using System.Timers; // Timers namespace rather than Threading
class SystemTimer
{
  static void Main()
  {
    Timer timer = new Timer(); // Doesn't require any args
    timer.Interval = 500;
    timer.Elapsed += timer_Elapsed; // Uses an event instead of a delegate
    timer.Start(); // Start the timer
    Console.ReadLine();
    timer.Stop(); // Stop the timer
    Console.ReadLine();
    timer.Start(); // Restart the timer
    Console.ReadLine();
    timer.Dispose(); // Permanently stop the timer
 }

 static void timer_Elapsed(object sender, EventArgs e)
 {
   Console.WriteLine ("Tick");
 }
}

Multithreaded timers - スレッドプールを使用して、いくつかのスレッドが多数のタイマーを処理できるようにします。コールバックメソッドまたはElapsedイベントは、呼び出されるたびに別のスレッドでトリガされる可能性があります。

Elapsed - このイベントは、以前のElapsedイベントが実行を終了したかどうかにかかわらず、時間のElapsedとともに常に発生します。このため、コールバックまたはイベントハンドラはスレッドセーフでなければなりません。マルチスレッドタイマーの精度は、OSによって異なりますが、通常は10〜20 msです。

interop - より正確な精度が必要な場合は、これを使用してWindowsマルチメディアタイマーを呼び出します。これは1msまでの精度を持ち、 winmm.dllで定義されていwinmm.dll

timeBeginPeriod - これを最初に呼び出し、高いタイミング精度が必要であることをOSに通知する

timeSetEvent -後にこれを呼び出すtimeBeginPeriodマルチメディアタイマーを開始します。

timeKillEvent - timeKillEventしたらこれを呼び出すと、タイマーが停止します

timeEndPeriod - これを呼び出すと、高いタイミング精度が不要になったことをOSに通知します。

dllimport winmm.dll timeseteventというキーワードを検索することで、マルチメディアタイマーを使用する完全な例をインターネット上で見つけることができます。

タイマーのインスタンスの作成

タイマーは、特定の時間間隔でタスクを実行するために使用されます(Y秒ごとにDo X)。以下は、タイマーの新しいインスタンスを作成する例です。

:これは、WinFormsを使用するタイマーに適用されます。 WPFを使用している場合は、 DispatcherTimer

    using System.Windows.Forms; //Timers use the Windows.Forms namespace

    public partial class Form1 : Form
    {

        Timer myTimer = new Timer(); //create an instance of Timer named myTimer

    
        public Form1()
        {
            InitializeComponent();
        }

    }

Timerに "Tick"イベントハンドラを割り当てる

タイマーで実行されるすべてのアクションは、「Tick」イベントで処理されます。

public partial class Form1 : Form
{

    Timer myTimer = new Timer();

    
    public Form1()
    {
        InitializeComponent();

        myTimer.Tick += myTimer_Tick; //assign the event handler named "myTimer_Tick"
    }

    private void myTimer_Tick(object sender, EventArgs e)
    {
        // Perform your actions here.
    }
}

例:タイマーを使用して単純なカウントダウンを実行する。

    public partial class Form1 : Form
    {

    Timer myTimer = new Timer();
    int timeLeft = 10;
    
        public Form1()
        {
            InitializeComponent();

            //set properties for the Timer
            myTimer.Interval = 1000;
            myTimer.Enabled = true;

            //Set the event handler for the timer, named "myTimer_Tick"
            myTimer.Tick += myTimer_Tick;

            //Start the timer as soon as the form is loaded
            myTimer.Start();

            //Show the time set in the "timeLeft" variable
            lblCountDown.Text = timeLeft.ToString();

        }

        private void myTimer_Tick(object sender, EventArgs e)
        {
            //perform these actions at the interval set in the properties.
            lblCountDown.Text = timeLeft.ToString();
            timeLeft -= 1;

            if (timeLeft < 0)
            {
                myTimer.Stop();
            }
        }
    }

結果は...

ここに画像の説明を入力 ここに画像の説明を入力

等々...



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow