C# C系统定时器定时器自动关机?

C# C系统定时器定时器自动关机?,c#,multithreading,visual-studio,timer,C#,Multithreading,Visual Studio,Timer,我有一个计时器,它会启动并在它自己的线程中无限期地执行它的工作,直到主线程中发生了什么事情来禁用它,在这种情况下,将启用另一个计时器。这很好用。唯一的问题是,我想完全确保第二个计时器不会运行太长时间 如果定时器由于某些故障没有收到特定的关机命令,有没有办法让定时器在10分钟后自动禁用 我看到这个类有一个方法。听起来好像有帮助,但我不知道怎么做 感谢各位朋友:为什么不让它在每次迭代时为全局变量加一个+1,比如说如果它每秒滴答一次,让计时器每滴答一次检查变量,一旦var达到600,就让计时器自行禁用

我有一个计时器,它会启动并在它自己的线程中无限期地执行它的工作,直到主线程中发生了什么事情来禁用它,在这种情况下,将启用另一个计时器。这很好用。唯一的问题是,我想完全确保第二个计时器不会运行太长时间

如果定时器由于某些故障没有收到特定的关机命令,有没有办法让定时器在10分钟后自动禁用

我看到这个类有一个方法。听起来好像有帮助,但我不知道怎么做


感谢各位朋友:

为什么不让它在每次迭代时为全局变量加一个+1,比如说如果它每秒滴答一次,让计时器每滴答一次检查变量,一旦var达到600,就让计时器自行禁用。

为什么不让它在每次迭代时为全局变量加一个+1,比如说如果它每秒滴答一次,让计时器每滴答地检查一次变量,一旦变量达到600,告诉计时器禁用自身。

只要声明一个类变量,并在启动计时器时将其设置为DateTime.Now。然后将其包含在计时器中:

DateTime time = DateTime.Now;

   private void timer1_Tick(object sender, EventArgs e)
   {
       if (DateTime.Compare(DateTime.Now, time.AddMinutes(10)) > 0)
       {
           timer1.Stop();
       }

       // timer code
   }

只需声明一个类变量,并在启动计时器时将其设置为DateTime.Now。然后将其包含在计时器中:

DateTime time = DateTime.Now;

   private void timer1_Tick(object sender, EventArgs e)
   {
       if (DateTime.Compare(DateTime.Now, time.AddMinutes(10)) > 0)
       {
           timer1.Stop();
       }

       // timer code
   }

当你启动第二个定时器以在给定时间后禁用它时,你可以考虑启动一个第三定时器。
        Timer t1 = new Timer(1000); // fire every second
        Timer t2 = new Timer(60000); // fire after 10 minutes
        t2.Elapsed += (o, e) => t1.Stop(); // disable timer 1 when timer 2 is elapsed

        t1.Start();
        t2.Start();
上面的示例顺便说一句,使用System.Timers.Timer。如果你正在使用Studio.thordime.TimeTime:你可能会考虑在那里进行切换,因为系统足够惊人。定时器是一个本质上是线程安全的系统,TycRead。定时器不是。< /P> 在这里可以找到相当好的概述:

为清晰起见,请编辑: 线路

也可以写成

 t2.Elapsed += new ElapsedEventHandler(t2_Elapsed);

void t2_Elapsed(object sender, ElapsedEventArgs e)
{
    t1.Stop();
}

这是你在VisualStudio中命中Ctrl +空间时所得到的,因为你可以在较低的方法中访问T1。

< P>你可以考虑在启动第二个定时器后在给定的时间内禁用第三定时器。
        Timer t1 = new Timer(1000); // fire every second
        Timer t2 = new Timer(60000); // fire after 10 minutes
        t2.Elapsed += (o, e) => t1.Stop(); // disable timer 1 when timer 2 is elapsed

        t1.Start();
        t2.Start();
上面的示例顺便说一句,使用System.Timers.Timer。如果你正在使用Studio.thordime.TimeTime:你可能会考虑在那里进行切换,因为系统足够惊人。定时器是一个本质上是线程安全的系统,TycRead。定时器不是。< /P> 在这里可以找到相当好的概述:

为清晰起见,请编辑: 线路

也可以写成

 t2.Elapsed += new ElapsedEventHandler(t2_Elapsed);

void t2_Elapsed(object sender, ElapsedEventArgs e)
{
    t1.Stop();
}

这就是在Visual Studio中按Ctrl+Space时实际得到的结果,前提是您可以在下面的方法中访问t1。

指定已用事件处理程序和全局布尔值

     Private Boolean eOccured = False;

     System.Timers.Timer aTimer = new System.Timers.Timer();
     aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
     aTimer.Interval = 600000; //milliseconds(10 min)
     aTimer.Enabled = True;
。。。 如果成功,代码将激活bool

然后在事件触发器上停止计时器

    private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        If (eOccured)
        {
            aTimer.Stop();
        }
    }

分配已用事件处理程序和全局布尔值

     Private Boolean eOccured = False;

     System.Timers.Timer aTimer = new System.Timers.Timer();
     aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
     aTimer.Interval = 600000; //milliseconds(10 min)
     aTimer.Enabled = True;
。。。 如果成功,代码将激活bool

然后在事件触发器上停止计时器

    private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        If (eOccured)
        {
            aTimer.Stop();
        }
    }

你能把第3行中的语法仔细琢磨一下吗?我不确定我是否理解它是如何工作的。你能把第3行中的语法琢磨清楚吗?我不确定我是否理解它是如何工作的。