我有很多方法(虽然它们一次只运行一种),但它们都使用相同的RunWorkerCompleated
and 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 上没有看到任何内容说这是不允许的,并且(到目前为止)它在我的程序中运行良好,但我想在这里检查一下是否有人遇到了这样做的麻烦。
为了确保事件处理程序在完成之前不会被删除,您可以执行以下操作:
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
您需要执行的所有操作,而不是共享类似的操作或包装在一个类中,这样您就可以更清楚地了解自己在做什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)