这是处理 BackGroundWorker 的正确方法吗?我不确定在调用 .Dispose() 之前是否有必要删除事件。在 RunWorkerCompleted 委托中调用 .Dispose() 也可以吗?
public void RunProcessAsync(DateTime dumpDate)
{
BackgroundWorker worker = new BackgroundWorker();
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync(dumpDate);
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
// Do Work here
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
worker.RunWorkerCompleted -= new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.DoWork -= new DoWorkEventHandler(worker_DoWork);
worker.Dispose();
}
BackgroundWorker 派生自 Component。组件实现 IDisposable 接口。这反过来又使BackgroundWorker继承Dispose()方法。
从 Component 派生对于 Windows 窗体程序员来说很方便,他们可以将 BGW 从工具箱拖放到窗体上。一般来说,组件可能需要处理一些东西。 Windows 窗体设计器会自动处理此问题,在 Designer.cs 文件中查找“组件”字段的窗体。其自动生成的 Dispose() 方法为所有组件调用 Dispose() 方法。
然而,BackgroundWorker 实际上没有任何需要处理的成员。它不会覆盖 Dispose()。它的基本实现 Component.Dispose() 仅确保组件从“组件”集合中删除。并引发 Disdisted 事件。但不会以其他方式处置任何东西。
长话短说:如果您在表单上放置了 BGW,那么一切都会自动处理,您无需提供帮助。如果您没有将其放在表单上,那么它就不是组件集合中的元素,无需执行任何操作。
您不必调用 Dispose().
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)