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检测内存泄漏?