完成运行后如何停止计时器?

我有一个控制台应用程序,在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以防止再次触发。