То, что вы можете сделать, чтобы убедиться, что обработчик событий не будет удален, пока вы не покончили с ним, это сделать что-то похожее на
Action DoWorkAction;
private void button_Process_Click(object sender, EventArgs e)
{
gbHistory.Enabled = false;
gbScrub.Enabled = false;
DoWorkAction = new Action(Scrub_DoWork);
bgWork_Process.DoWork += DoWorkAction;
bgWork_Process.RunWorkerAsync();
}
И во что бы то ни стало обрабатывает ваше завершение
private void bgWork_Process_CompletedHandler(object sender, EventArgs e)
{
bgWork_Process.DoWork -= DoWorkAction;
}
Я чувствую, однако; что может быть лучше просто иметь отдельное BackGroundWorkers
для всех ваших действий, которые вам нужно выполнить, вместо того, чтобы делиться с ним подобным или обернуть в классе, чтобы вы могли быть более ясными в том, что вы делаете.