System.Timer.Timerクラスは、必要なものすべてに適しています。
タイマーを開始してから、10 秒ごとにメソッドを呼び出します。
この最初の部分は簡単です。interval プロパティを 10000 に設定し、 AutoResetプロパティを trueに設定して、 Elapsedイベントを処理する必要があります。
2 番目 - 10 秒のスパンの有効期限が切れる前にメソッドを手動で呼び出した場合、タイマーをリセットし、実行から 10 秒待ちます。
手動でトリガーすることは、実際にはそれほど簡単ではありません。最善の方法は、それを停止し、経過したイベントで実行しようとしていたことをすべて実行してから、再起動することです。
ただし、これには大きな注意点があります。タイマーは手動でトリガーされたスレッドとは別のスレッドで実行されるため、処理メソッドが再入可能であることを確認する必要があります。これは、メソッドの実行に 10 秒かかる場合にも問題になります。ロックを使用するのが最も簡単な方法です。
タイマーのデモンストレーションとして、Enter キーを押すと手動で起動し、2 秒待ってから再び起動する小さなプログラムを次に示します。
class Program
{
static void Main(string[] args)
{
var timer = new System.Timers.Timer();
timer.Interval = 2000; // 2 seconds here
timer.AutoReset = true; //Restart
Action<object, EventArgs> Elapsed = (object o, EventArgs e) => Console.WriteLine(DateTime.Now);
timer.Elapsed += new System.Timers.ElapsedEventHandler(Elapsed);
timer.Start();
while (Console.ReadLine() != "quit")
{
timer.Stop();
Elapsed.Invoke(new object(), EventArgs.Empty);
timer.Start();
}
}
}