我想知道最好的方法:
using (var backgroundWorker = new BackgroundWorker())
{
DoWorkEventHandler doWorkHandler = null;
doWorkHandler = (s, e) =>
{
//Some expensive code goes here...
backgroundWorker.DoWork -= doWorkHandler;
//or
//((BackgroundWorker)s).DoWork -= doWorkHandler;
};
backgroundWorker.DoWork += doWorkHandler;
RunWorkerCompletedEventHandler workerCompleted = null;
workerCompleted = (s, e) =>
{
//Update IU or something...
backgroundWorker.RunWorkerCompleted -= workerCompleted;
//or
//((BackgroundWorker)s).RunWorkerCompleted -= workerCompleted;
};
backgroundWorker.RunWorkerCompleted += workerCompleted;
backgroundWorker.RunWorkerAsync();
}
X
>我想我真的需要删除处理程序以避免泄漏或其他问题.对?
> Witch是最好的,使用“ s”参数或通过变量backgroundWorker访问BackgroundWorker实例吗?是否相同?
解决方法:
1)你到底是什么意思?要删除“ doWorkHandler”?
如果是这样,就您不需要(据我所知).
正如Ale所说,您只需要重用相同的bgw.
但是对于使用而言,我不会那样做.
这只是我的实现方式,但对于bgw,我会坚持使用类中包含的变量.
2)两种访问方式都可以正常工作(常规使用).使用“ s”是“更好”的选择,但是您必须对所有内容进行类型转换,因此代码将变得更难阅读.
我个人将使用变量声明代替(直接访问)代替“ s”对象.
现在,有一些新东西.
看一下Task库.
可能是一个行之有效的方法(我发现它比使用Background Worker更好和更容易).
您还可以构建并行任务=)