1

有没有办法用给定的动作建立一个新的计时器,但从一开始就告诉它它必须在一小时后杀死自己?(它可以自己解决还是我需要另一条线来处理它?)

4

1 回答 1

1

我会使用两个计时器,一个做你想做的事,另一个在一小时后杀死第一个计时器。

这里有两个示例,每个示例都使用 1 秒的主计时器,需要在第五秒时终止。

如果您使用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();

所有时间都以毫秒为单位(1000 秒)。根据这篇文章,这是首选,但System.Threading.Timer根据这篇文章System.Timers.Timer它适用于可能从不同线程调用计时器方法的情况。

于 2012-08-12T08:44:45.840 回答