タイマーを実装するための最良の方法は何ですか?コードサンプルは素晴らしいでしょう!この質問では、「最良」は最も信頼性が高く(失火の数が最も少ない)正確であると定義されています。15秒の間隔を指定する場合、ターゲットメソッドを10〜20秒ごとではなく、15秒ごとに呼び出す必要があります。一方、ナノ秒の精度は必要ありません。この例では、メソッドが14.51〜15.49秒ごとに起動することが許容されます。
4 に答える
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
。
クラスを使用することにより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();
開発するアプリケーションの種類(デスクトップ、Web、コンソールなど)は明確ではありません。
Windows.Forms
アプリケーションを開発している場合の一般的な答えは、
System.Windows.Forms.Timerクラス。これの利点は、UI
スレッド上で実行されることです。そのため、定義し、Tickイベントをサブスクライブし、15秒ごとにコードを実行するだけです。
Windowsフォーム以外の何かを行う場合(質問からは明らかではありません)、System.Timers.Timerを選択できますが、これは他のスレッドで実行されるため、 ElapsedイベントからいくつかのUI要素を操作する場合、「呼び出し」アクセスで管理する必要があります。
クラスを参照し、イベント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));
}