原提問者嘗試重複註冊同一事件處理器:
this.btnMPrint.Click += new System.EventHandler(this.btnMPrint_Click);
this.btnMPrint.Click += new System.EventHandler(this.btnMPrint_Click);
雖然技術上可行(事件調用列表中添加兩次委託),但極不推薦:難以維護、調試困難、違背單一職責原則。
private void btnMPrint_Click(object sender, EventArgs e) {
DoPrintWork(); // 第一次
DoPrintWork(); // 第二次
}
private void DoPrintWork() {
// 真正的打印邏輯
}
private void btnMPrint_Click(object sender, EventArgs e) {
for (int i = 0; i < 2; i++) {
PerformPrint(i);
}
}
private async void btnMPrint_Click(object sender, EventArgs e) {
await Task.Run(() => DoPrintWork());
await Task.Delay(100);
await Task.Run(() => DoPrintWork());
}
-= 兩次,易漏掉導致內存洩漏。將「執行次數」作為業務邏輯參數顯式控制,而非利用事件機制副作用。代碼更清晰、可測試、易擴展。