我想知道最好的方法:
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
- 我想我真的需要删除处理程序以避免泄漏或其他问题。对吧?
- 女巫最好,通过“s”参数或通过变量backgroundWorker访问BackgroundWorker实例?是否相同?
最佳答案
无需删除处理程序,除非您在其他地方重复使用相同的 BackgroundWorker 实例。但是,假设您用 Using 围绕它,这应该不是问题(在这种情况下,您的工作人员的范围是 using 语句)。
此外,对 backgroundWorker 实例的访问应该以任何一种方式进行,但是,在循环数据时,我经常喜欢使用 userState 而不是它在 RunWorkerCompletedEventArgs 中返回。
关于c# - 在 C# 中使用 System.ComponentModel.BackgroundWorker 和 lambda 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5184160/