c#检测表单中的计时器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#检测表单中的计时器相关的知识,希望对你有一定的参考价值。

我正在使用C#,WinForms,我在我的表单上创建了一个按钮,我动态创建了一个计时器。我有另一个按钮,我需要检查我创建了多少计时器。

我试图在表单中取消计时器,但它不起作用,这里是代码:

int i=0;
private void button1_Click(object sender, EventArgs e)
{
    Timer timer = new Timer();
    timer.Interval = update;
    timer.Tag = i;
    timer.Tick += new EventHandler(timer_Tick);            
    timer.Start();
    timer.Enabled = true;
    i++;
}


private void button2_Click(object sender, EventArgs e)
{

    foreach (var controllo in this.Controls)
    {
        if (controllo is Timer)
        {
            Timer item = (Timer)controllo;
            if (timer.Tag ==1)
            {
                item.Stop();
                item.Dispose();
            }
        }
    }
}
答案

您尚未将新创建的计时器添加到form.controls。这是循环无法找到控件,我建议你将定时器添加到Form控件,如下所示:

private void button1_Click(object sender, EventArgs e)
{
    Timer timer = new Timer();
    // code here
    this.Controls.Add(timer);
}
private void button2_Click(object sender, EventArgs e)
{    
    foreach (var ctrl in this.Controls.OfType<Timer>())
    {
        if (ctrl.Tag ==1)
        {
            ctrl.Stop();
            ctrl.Dispose();
        }
    }
}

或者,您可以使用List并将新创建的计时器添加到列表中,稍后您可以遍历List<Timer>而不是遍历所有控件。这意味着代码将如下所示:

List<Timer> TimerList =new List<Timer>();
int i=0;
private void button1_Click(object sender, EventArgs e)
{
    Timer timer = new Timer();
    // code here
    TimerList.Add(timer);
}
private void button2_Click(object sender, EventArgs e)
{
     foreach (Timer t in GlobalTimers)
     {
           if (t.Tag ==1)
           {
               t.Stop();
               t.Dispose();
           }
      }
 }   
另一答案

在表格中维护全球计时器列表

List<Timer> GlobalTimers=new List<Timer>();

private void button1_Click(object sender, EventArgs e)
    {
     Timer timer = new Timer();
        timer.Interval = update;
        timer.Tag = i;
        timer.Tick += new EventHandler(timer_Tick);            
        timer.Start();
        timer.Enabled = true;
        GlobalTimers.Add(timer);
     }


  private void button2_Click(object sender, EventArgs e)
  {
      foreach (var item in GlobalTimers)
      {
            if (item.Tag ==1)
            {
                item.Stop();
                item.Dispose();
            }
       }
  }

以上是关于c#检测表单中的计时器的主要内容,如果未能解决你的问题,请参考以下文章

拖动并复制表单中的按钮

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

使用 Pygments 检测代码片段的编程语言

#yyds干货盘点#愚公系列2023年02月 .NET/C#知识点-程序运行计时的总结

Android:使用Tab检测单个片段viewpager

python使用上下文对代码片段进行计时,非装饰器