以下代码隐藏表单10秒钟。没什么太疯狂的。 每次按下按钮,它都会创建一个新的计时器对象,该对象不会停止并继续运行。我的直觉告诉我,如果你最后多次按下这个按钮,那么只有一个是必要的(或者我的假设不正确?),你会有一堆正在运行的计时器。另外,如果我确实需要停止并处理此计时器,我是否只需将其作为RevealForm中的参数发送,或者让计时器为类级变量并且每次都停止/重置它?
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;
}
}
非常感谢!
答案 0 :(得分:1)
您的假设是正确的 - 测试会为您声明。
你可以:
A)每次执行后(每个间隔)禁用计时器并单击启用,或
B)停止并销毁计时器并在每次点击时创建一个新计时器。
任何一个选项都需要对现有代码进行一些重构。
关于问题的第二部分 - 如何停止计时器是优先的。在这么小的应用程序中(如果这是它的整个功能)那么简单地在事件处理程序(或相关方法)中停止计时器就可以做到这一点,但是为了访问Timer
实例,你会声明它在范围的更高级别(即不受click事件处理程序范围的限制)。
答案 1 :(得分:1)
在类中创建计时器,然后在每次单击时调用t.start()。
无需销毁/清理/等。只需回收你的那个。
答案 2 :(得分:1)
通常,您要做的第一件事是在事件处理程序中停止计时器。
如果您只想要一个计时器然后将其设为表单级变量,请在您的ButtonHide_Click中启动它,然后在RevealForm方法的顶部停止计时器。