c#检测表单中的计时器

时间:2018-03-01 13:57:58

标签: c# visual-studio timer

我正在使用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();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

以表格

维护全球计时器列表
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();
            }
       }
  }

答案 1 :(得分:0)

您还没有将新创建的计时器添加到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<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();
           }
      }
 }