C# 清理计时器?
下面的代码将表单隐藏10秒钟。没什么太疯狂的。 每次按下按钮时,它都会创建一个新的计时器对象,该对象不会停止,而是继续运行。我的直觉告诉我,如果你多次按下这个按钮,就会有一堆计时器在运行,而只有一个计时器是必需的(或者我的假设是错误的?)。另外,如果我确实需要停止并处理这个计时器,我会将它作为RevelForm中的一个参数发送,还是让计时器成为一个类级变量并每次停止/重置它C# 清理计时器?,c#,winforms,timer,C#,Winforms,Timer,下面的代码将表单隐藏10秒钟。没什么太疯狂的。 每次按下按钮时,它都会创建一个新的计时器对象,该对象不会停止,而是继续运行。我的直觉告诉我,如果你多次按下这个按钮,就会有一堆计时器在运行,而只有一个计时器是必需的(或者我的假设是错误的?)。另外,如果我确实需要停止并处理这个计时器,我会将它作为RevelForm中的一个参数发送,还是让计时器成为一个类级变量并每次停止/重置它 private void ButtonHide_Click(object sender, EventArgs e)
private void ButtonHide_Click(object sender, EventArgs e) {
this.Visible = false;
System.Timers.Timer t = new System.Timers.Timer();
t.Elapsed += new ElapsedEventHandler(RevealForm);
t.Interval = 10000;
t.AutoReset = false;
t.Start();
}
private void RevealForm(object source, ElapsedEventArgs e) {
InvokeReveal();
}
private void InvokeReveal() {
if (InvokeRequired) {
Invoke(new Action(InvokeReveal));
}
else {
this.Visible = true;
}
}
多谢 您的假设是正确的-测试会为您断言这一点 你可以:
- A) 在每次执行后(每个间隔)禁用计时器并在单击时启用,或者
- B) 停止并销毁计时器,并在每次单击时创建一个新的计时器
至于问题的第二部分——如何停止计时器是优先考虑的。在这样一个小的应用程序中(如果这是它的全部功能),那么简单地在事件处理程序(或相关方法)中停止计时器就可以了,尽管为了访问
计时器
实例,您可以在范围的更高级别上声明它(即不绑定在click事件处理程序的范围内) 您的假设是正确的-测试会为您断言这一点
你可以:
- A) 在每次执行后(每个间隔)禁用计时器并在单击时启用,或者
- B) 停止并销毁计时器,并在每次单击时创建一个新的计时器
至于问题的第二部分——如何停止计时器是优先考虑的。在这样一个小的应用程序中(如果这是它的全部功能),那么简单地在事件处理程序(或相关方法)中停止计时器就可以了,尽管为了访问
计时器
实例,您可以在范围的更高级别上声明它(即不绑定在click事件处理程序的范围内) 在类中创建计时器,然后在每次单击时调用t.start()
无需销毁/清理等。只需回收您拥有的计时器。在类中创建计时器,然后在每次单击时调用t.start()
无需销毁/清理等。只需回收您拥有的一个。通常,您要做的第一件事是停止事件处理程序中的计时器
如果只需要一个计时器,然后将其设置为表单级变量,请在ButtonHide_单击中启动它,然后在RevealForm方法的顶部停止计时器。通常,首先要在事件处理程序中停止计时器 如果您只需要一个计时器,那么将其设置为表单级变量,在您的ButtonHide_单击中启动它,然后在RevealForm方法的顶部停止计时器