[英]How to stop a timer after it is done running?
我有一个控制台应用程序,在main方法中,我有这样的代码:
Timer time = new Timer(seconds * 1000); //to milliseconds
time.Enabled = true;
time.Elapsed += new ElapsedEventHandler(time_Elapsed);
我只想让计时器运行一次所以我的想法是我应该在time_Elapsed方法中停止计时器。 但是,由于我的计时器存在于Main()中,我无法访问它。
您可以访问timer_Elapsed
方法中的Timer:
public void timer_Elapsed(object sender, ElapsedEventArgs e)
{
Timer timer = (Timer)sender; // Get the timer that fired the event
timer.Stop(); // Stop the timer that fired the event
}
上述方法将停止任何Timer触发事件(如果你有多个使用相同处理程序的计时器,并且你希望每个Timer具有相同的行为)。
您还可以在实例化Timer时设置行为:
var timer = new Timer();
timer.AutoReset = false; // Don't reset the timer after the first fire
一个小例子应用程序:
static void Main(string[] args)
{
int seconds = 2;
Timer time = new Timer(seconds * 1000); //to milliseconds
time.Enabled = true;
time.Elapsed += new ElapsedEventHandler(MyHandler);
time.Start();
Console.ReadKey();
}
private static void MyHandler(object e, ElapsedEventArgs args)
{
var timer = (Timer) e;
timer.Stop();
}
我假设您使用的是System.Timers.Timer
而不是System.Windows.Forms.Timer
?
你有两个选择。
首先,可能是最好的,是将AutoReset
属性设置为false
。 这应该完全符合你的要求。
time.AutoReset = false;
另一种选择是在事件处理程序中调用Stop
。
您也可以使用System.Threading.Timer。 它的构造函数有两个与时间相关的参数:
将句点设置为Timeout.Infinite以防止再次触发。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.