public void A() {
System.Timers.Timer t = new System.Timers.Timer(10000); // 局部變量
t.Elapsed += b;
t.AutoReset = true;
t.Start();
}
public void C() {
t.Stop(); // ❌ 編譯錯誤:t 不在作用域內
}
public partial class MainForm : Form {
private System.Timers.Timer _timer; // 類字段
public void A() {
_timer = new System.Timers.Timer(10000);
_timer.Elapsed += OnTimerElapsed;
_timer.AutoReset = true;
_timer.Start();
}
public void C() {
_timer?.Stop(); // 安全調用
}
private void OnTimerElapsed(object sender, ElapsedEventArgs e) {
// 執行任務,注意跨線程更新 UI 需 Invoke
this.Invoke((Action)() => { /* 更新 UI */ });
}
}
Timer 實例聲明為 private 字段,生命周期與窗體一致;Control.Invoke/BeginInvoke 回主線程;FormClosing 中調用 _timer?.Dispose()。
![]()