gpt4 book ai didi

c# - 处理 BackGroundWorker 的正确方法

转载 作者:IT王子 更新时间:2023-10-29 03:51:09 24 4
gpt4 key购买 nike

这是处理 BackGroundWorker 的正确方法吗?我不确定在调用 .Dispose() 之前是否需要删除事件。在 RunWorkerCompleted 委托(delegate)中调用 .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 接口(interface)。这反过来又使 BackgroundWorker 继承了 Dispose() 方法。

从组件派生对于 Windows 窗体程序员来说很方便,他们可以将 BGW 从工具箱放到窗体上。一般而言,组件在某种程度上可能需要处理一些东西。 Windows 窗体设计器会自动处理此问题,在 Designer.cs 文件中查找“组件”字段的窗体。它自动生成的 Dispose() 方法为所有组件调用 Dispose() 方法。

然而,BackgroundWorker 实际上并没有任何需要释放的成员。它不会覆盖 Dispose()。它的基本实现 Component.Dispose() 仅确保从“组件”集合中删除该组件。并引发 Disposed 事件。但不会以其他方式处置任何东西。

长话短说:如果您将 BGW 放在表单上,​​那么一切都会自动处理,您无需提供帮助。如果您没有将它放在表单上,​​那么它就不是组件集合中的元素,无需执行任何操作。

您不必调用 Dispose()

关于c# - 处理 BackGroundWorker 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2542326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com