c#检测表单中的计时器

问题描述 投票:-1回答:2

我正在使用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();
            }
        }
    }
}
c# visual-studio timer
2个回答
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并将新创建的计时器添加到列表中,稍后您可以遍历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();
           }
      }
 }   

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();
            }
       }
  }
© www.soinside.com 2019 - 2024. All rights reserved.