在调试期间,我可以看到在 Timer.Stop()
或 Timer.Enabled = false
命令执行后,Timer 仍在运行 (Timer.Enabled = true) .这怎么可能?
最佳答案
当您停止工作线程上的计时器时,这是可能的。例如:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
Timer timer1;
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
timer1 = new Timer();
timer1.Interval = 3000;
timer1.Start();
var t = new System.Threading.Thread(stopTimer);
t.Start();
}
private void stopTimer() {
timer1.Enabled = false;
System.Diagnostics.Debug.WriteLine(timer1.Enabled.ToString());
}
}
输出:
是的
计时器必须由 UI 线程停止,类会自动处理它。与 Control.BeginInvoke() 非常相似。有一个明确的竞争, Tick 事件处理程序可以在您停止后运行。如果您创建的第一个计时器是在工作线程上创建的,那么这也可能发生在 UI 线程上。例如启动画面。这不健康,您应该解决这个问题。
关于c# - Windows 窗体计时器不会停止。这怎么可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6957629/