主窗體 Form1 按鈕打開 Form2,Form2 含 30 分鐘發送郵件的定時器。點擊保存後 Form2 隱藏,再次點擊按鈕會 new 新實例導致定時器重複運行。
public partial class Form1 : Form {
private Form2 _form2; // 類級字段持有引用
private void button1_Click(object sender, EventArgs e) {
if (_form2 == null || _form2.IsDisposed) {
_form2 = new Form2();
_form2.FormClosed += (s, args) => _form2 = null; // 關閉時釋放引用
}
_form2.Show(); // 隱藏狀態下也會顯示
_form2.BringToFront();
}
}
public partial class Form2 : Form {
private System.Timers.Timer _timer;
public Form2() {
InitializeComponent();
_timer = new System.Timers.Timer(30 * 60 * 1000);
_timer.Elapsed += (s, e) => SendEmail();
_timer.AutoReset = true;
}
private void btnSave_Click(object sender, EventArgs e) {
_timer.Start(); // 或根據配置決定啟停
this.Hide();
}
protected override void OnFormClosing(FormClosingEventArgs e) {
if (e.CloseReason == CloseReason.UserClosing) {
e.Cancel = true; // 取消關閉
this.Hide(); // 改為隱藏
}
_timer?.Stop();
base.OnFormClosing(e);
}
}