我有很多方法(它们一次只运行一个),它们都使用相同的RunWorkerCompleated
和ProgressChanged
方法,但它们都有不同的Dowork
方法。执行以下操作是否安全:
private void button_Process_Click(object sender, EventArgs e)
{
bgWork_Process.DoWork += Scrub_DoWork;
bgWork_Process.RunWorkerAsync();
bgWork_Process.DoWork -= Scrub_DoWork;
}
或者我可以打一个边缘案例吗?我没有在MSDN上看到任何关于它的信息,说它不被允许,并且它(到目前为止)在我的程序中正常运行,但是我想在这里查看是否有人遇到麻烦这样做。
答案 0 :(得分:1)
在完成事件处理程序之前,您可以采取哪些措施来确保事件处理程序不会被删除,而是执行与
类似的操作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
而不是与之共享类似的操作或包装在类中可能更好,这样你就可以更清楚你正在做什么。 / p>