【问题标题】:stop timer after interval time in c#在c#中的间隔时间后停止计时器
【发布时间】:2014-06-27 02:57:52
【问题描述】:

我在 Visual Studio 2008 中使用 .net compact framework 3.5

我创建了一个计时器滴答事件来执行一项工作。我只想调用一次计时器,之后我需要禁用计时器。请参阅我的以下代码

   int counter = 0;
        var timer = new Timer { Enabled = true, Interval = 10000 };
        timer.Tick += delegate
        {
            Cleanup();
        };
        counter++;
        if (counter >= 1)
        {
            timer.Enabled = false;
        }

我在没有任何条件的情况下尝试使用timer.Enabled = false;,发生的情况是Cleanup() 函数没有在滴答事件中调用。所以从谷歌我得到了另一种使用计数器的解决方案。我也面临着计数器同样的问题,Cleanup() 没有调用。

如果我没有禁用计时器,则该函数每 10 秒调用一次。我只需要调用一次 Cleanup() 函数,它在 timer.tick 内。需要帮助来解决这个问题。

谢谢

【问题讨论】:

  • 计数器++;应该包含在委托中,否则会立即调用。
  • 计数器++;应该在刻度线中
  • 看看这个解决方案,您可以将它用于您的案例:stackoverflow.com/questions/16814232/…
  • 您能否指定您使用的是哪个Timer 类。显然不是System.Threading.Timer,可能是System.Windows.Forms.Timer 基于Tick 方法...
  • @AlexeiLevenkov 这不是 System.Threading.Timer。

标签: c# .net visual-studio-2010 visual-studio c#-4.0


【解决方案1】:

为什么需要计数器:

应该够了

timer.Tick += delegate
{
   timer.Enabled = false;
   Cleanup();
};

【讨论】:

    【解决方案2】:

    如果您使用 System.Timers.Timer,另一种方法 - 使用 Timer.AutoReset 使其仅触发一次:

    var timer = new System.Timers.Timer(10000) { AutoReset = false };
    timer.Elapsed += (s,e)=>Cleanup();
    timer.Enabled = true;
    

    【讨论】:

      【解决方案3】:

      使用 lambda 的短符号:

      var timer = new Timer { Enabled = true, Interval = 10000 };
      timer.Tick +=()=>{ timer.Enabled=false; Cleanup();};
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-02
        • 2019-10-04
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2023-02-09
        相关资源
        最近更新 更多