216

タイマーを実装するための最良の方法は何ですか?コードサンプルは素晴らしいでしょう!この質問では、「最良」は最も信頼性が高く(失火の数が最も少ない)正確であると定義されています。15秒の間隔を指定する場合、ターゲットメソッドを10〜20秒ごとではなく、15秒ごとに呼び出す必要があります。一方、ナノ秒の精度は必要ありません。この例では、メソッドが14.51〜15.49秒ごとに起動することが許容されます。

4

4 に答える 4

374

Timerクラスを使用します。

public static void Main()
{
    System.Timers.Timer aTimer = new System.Timers.Timer();
    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
    aTimer.Interval = 5000;
    aTimer.Enabled = true;

    Console.WriteLine("Press \'q\' to quit the sample.");
    while(Console.Read() != 'q');
}

 // Specify what you want to happen when the Elapsed event is raised.
 private static void OnTimedEvent(object source, ElapsedEventArgs e)
 {
     Console.WriteLine("Hello World!");
 }

イベントは、TimerオブジェクトElapsedのプロパティで指定されたXミリ秒ごとに発生します。指定したメソッドをInterval呼び出します。Event Handler上記の例では、ですOnTimedEvent

于 2012-09-21T17:59:22.890 に答える
50

クラスを使用することによりSystem.Windows.Forms.Timer、必要なことを達成できます。

System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();


t.Interval = 15000; // specify interval time as you want
t.Tick += new EventHandler(timer_Tick);
t.Start();

void timer_Tick(object sender, EventArgs e)
{
      //Call method
}

stop()メソッドを使用すると、タイマーを停止できます。

t.Stop();
于 2012-09-21T18:05:50.997 に答える
32

開発するアプリケーションの種類(デスクトップ、Web、コンソールなど)は明確ではありません。

Windows.Formsアプリケーションを開発している場合の一般的な答えは、

System.Windows.Forms.Timerクラス。これの利点は、UIスレッド上で実行されることです。そのため、定義し、Tickイベントをサブスクライブし、15秒ごとにコードを実行するだけです。

Windowsフォーム以外の何かを行う場合(質問からは明らかではありません)、System.Timers.Timerを選択できますが、これは他のスレッドで実行されるため、 ElapsedイベントからいくつかのUI要素を操作する場合、「呼び出し」アクセスで管理する必要があります。

于 2012-09-21T18:01:45.727 に答える
3

クラスを参照し、イベントServiceBaseに以下のコードを配置します。OnStart

Constants.TimeIntervalValue = 1(時間)..理想的には、構成ファイルでこの値を設定する必要があります。

StartSendingMails=アプリケーションで実行する関数名。

 protected override void OnStart(string[] args)
        {
            // It tells in what interval the service will run each time.
            Int32 timeInterval = Int32.Parse(Constants.TimeIntervalValue) * 60 * 60 * 1000;
            base.OnStart(args);
            TimerCallback timerDelegate = new TimerCallback(StartSendingMails);
            serviceTimer = new Timer(timerDelegate, null, 0, Convert.ToInt32(timeInterval));
        }
于 2012-09-21T18:12:30.153 に答える