我知道,唯一的无死锁和异常安全的方法是实际上取消FormClosing事件。如果BGW仍在运行,则设置e.Cancel =
true,并设置一个标志以指示用户请求关闭。然后在BGW的RunWorkerCompleted事件处理程序中检查该标志,并设置Close()。
private bool closePending;protected override void onFormClosing(FormClosingEventArgs e) { if (backgroundWorker1.IsBusy) { closePending = true; backgroundWorker1.CancelAsync(); e.Cancel = true; this.Enabled = false; // or this.Hide() return; } base.onFormClosing(e);}void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (closePending) this.Close(); closePending = false; // etc...}


