繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM