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

C# 如何在计时器运行完成后停止计时器?,c#,timer,C#,Timer,我有一个控制台应用程序,在main方法中,我有如下代码: Timer time = new Timer(seconds * 1000); //to milliseconds time.Enabled = true; time.Elapsed += new ElapsedEventHandler(time_Elapsed); 我只想让计时器运行一次,所以我的想法是我应该在time_appeased方法中停止计时器。但是,由于我的计时器存在于Main()中,我无法访问它。一个小示例应用程序:

我有一个控制台应用程序,在main方法中,我有如下代码:

Timer time = new Timer(seconds * 1000); //to milliseconds
time.Enabled = true;
time.Elapsed += new ElapsedEventHandler(time_Elapsed);
我只想让计时器运行一次,所以我的想法是我应该在time_appeased方法中停止计时器。但是,由于我的计时器存在于Main()中,我无法访问它。

一个小示例应用程序:

    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();
    }

您可以访问
Timer\u expressed
方法中的计时器:

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
}
上面的方法将停止触发事件的任何计时器(如果您有多个计时器使用相同的处理程序,并且希望每个计时器具有相同的行为)

您还可以在实例化计时器时设置行为:

var timer = new Timer();
timer.AutoReset = false; // Don't reset the timer after the first fire

我假设您使用的是
System.Timers.Timer
,而不是
System.Windows.Forms.Timer

你有两个选择

首先,最好是将
AutoReset
属性设置为
false
。这应该正是你想要的

time.AutoReset = false;

另一个选项是在事件处理程序中调用
Stop

您也可以使用System.Threading.Timer。其构造函数采用两个与时间相关的参数:

  • 第一次“滴答”之前的延迟(到期时间)
  • 时期

将时间段设置为Timeout.Infinite以防止再次触发。

这是我想要做的,您首先回答正确,这是一个大检查!顺便说一句,将
AutoReset=true
作为默认设置对我来说似乎有点精神错乱。我多次忘记将其设置为
false
并遇到问题。System.Timers.Timer而不是System.Windows.Forms.Timer?请具体说明,因为我来这里是为了同一个问题,但答案是针对不同的计时器,没有任何帮助。如何将其设置为超时。无限可能是一个合理的问题-这并不明显