1

特定のアクションで新しいタイマーを作成する方法はありますが、最初から 1 時間後にそれ自体を強制終了する必要があることを伝えますか? (それ自体で解決できますか、またはそれを処理するために別の行が必要ですか?)

4

1 に答える 1

1

私は 2 つのタイマーを使用します。1 つは好きなように実行し、もう 1 つは 1 時間後に最初のタイマーを停止します。

以下に 2 つの例を示します。それぞれ 1 秒のプライマリ タイマーを使用しており、5 秒で強制終了する必要があります。

System.Threading.Timerを使用している場合:

Timer actualTimer = new Timer(obj => Console.WriteLine("Timer!"),
    null, 0, 1000);

Timer killingTimer = new Timer(obj =>
{
    Console.WriteLine("Killing timer!");
    // Set the dueTime and timeout to infinite, to stop the timer.
    actualTimer.Change(Timeout.Infinite, Timeout.Infinite);
    killingTimer.Change(Timeout.Infinite, Timeout.Infinite);
}, null, 5000, 5000);

Console.ReadLine();

System.Timers.Timerを使用している場合:

Timer actualTimer = new Timer();
actualTimer.Interval = 1000;
actualTimer.Elapsed += (sender, e) => Console.WriteLine("Timer!");
actualTimer.Start();

Timer killingTimer = new Timer();
killingTimer.Interval = 5000;
killingTimer.Elapsed += (sender, e) =>
{
    Console.WriteLine("Killing timer!");
    actualTimer.Stop();
    killingTimer.Stop();
};
killingTimer.Start();

すべての時間はミリ秒単位です (1 秒で 1000)。System.Threading.Timerこの投稿 によると推奨されますが、この投稿によるとSystem.Timers.Timer、タイマーのメソッドが異なるスレッドから呼び出される可能性がある状況向けです。

于 2012-08-12T08:44:45.840 に答える