处理 BackGroundWorker 的正确方法

2024-01-15

这是处理 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(使用前将#替换为@)

处理 BackGroundWorker 的正确方法 的相关文章

随机推荐

  • javascript / jquery - 选择两个数字中较大的一个

    我正在尝试使用 javascript 选择两个数字中较大的一个 我知道我可以编写一个 if 语句 但我想知道是否有某种数学运算或其他东西可以提高效率 以下是我使用 if 语句执行此操作的方法 if a gt b c a else c b 我
  • 请求对象没有属性“accepted_renderer”

    如果出现这个问题会怎样 请求对象没有属性 accepted renderer 这些消息在我的日志中 处理此事件时遇到错误 丢弃参数 timestamp 的无效值 Expand 基本视图集类 class BaseViewSet Logging
  • Meteor JS 在客户端 html 上模拟服务器命令行

    我是 Meteor 的新手 想要制作一个简单的应用程序 我无法根据以下内容在服务器端模拟命令行http terokaisti blogspot com 2012 10 writing terminal app with meteor js
  • 使用 Windows 脚本宿主

    我正在将 Windows 脚本主机用于某种安装程序应用程序 并使用它在开始菜单中创建快捷方式 这个问题是我切换到x64环境 win7旗舰版x64 vs2010 时出现的 我添加了对 Windows 脚本宿主对象模型的引用 来自 c wind
  • 根据自定义 TreeItem 属性更改更新 TreeView

    我扩展了 TreeCell 和 TreeItem 类 MyTreeItem 包含一个自定义属性 我在 MyTreeCell 中使用它来渲染图形 字体等 问题是当我设置 MyTreeCell customProperty 时 我不确定如何使
  • 开始涉足 Android 平板电脑开发

    我最近买了一个Motorola XOOM用于开发 Android 应用程序的平板电脑 我在寻找学习资源方面遇到了重大问题 我了解Java Android 开发指南示例代码几乎全部依赖于键盘 否则无法在我的设备上运行XOOM 除了 Andro
  • 验证 asp 文件上传控件客户端

    我的页面上有一个 asp 文件上传控件 如何在客户端验证所选文件 验证规则 1 文件必须是 jpeg png bmp 或 gif 2 文件大小必须在 25 kb 和 2 mb 以内 请帮忙 谢谢 我已尝试以下代码来验证扩展
  • Reactive Extensions 基于特定数量的并行处理

    我是反应式扩展的新手 我有对象集合并为每个对象调用一个方法 并且方法返回布尔值 有没有办法通过使用 for every 循环并调用该方法来遍历每个反应性扩展对给定数量的对象 一次 5 个 同时调用 fork 和 join 方法 并且在第一个
  • 如何使申请仅有效3天

    我正在上述平板电脑上安装此应用程序 我打算向我的客户提供此平板电脑一两天 我想要的是 经检查操作情况 客户应在有效期后无法使用该应用程序 为此 我调用 calander 函数 并将提取的系统日期 日 与我希望应用程序关闭操作的日期进行比较
  • 你的Ruby版本是2.3.1,但是你的Gemfile在运行rails时指定了2.4.1

    我正在尝试从 ruby 2 3 0 升级到 2 4 1 为此 我做了 rvm use 2 4 1 my project create 我已经在另一个项目中使用 2 4 1 我改变了 gemfileruby 2 3 0 to ruby 2 4
  • 简单的pthread! C++

    我不知道为什么这不起作用 include
  • Avalon Dock 浮动锚定物能否更加独立于其父级?

    我有一个 AvalonDock DockingManager 控件 其中包含一些子锚定对象 无文档 如果这些 Anchorables 从主 DockingManager 浮动 我知道它们仍然是 DockingManager 逻辑树的一部分
  • AttributeError:模块“keras.backend”没有属性“image_dim_ordering”

    我尝试执行一些教程迁移学习项目 但我遇到属性错误 我检查了我的tensorflow和keras版本 张量流 1 14 0 喀拉斯 2 2 5 和 python 3 6 9 版本 代码在这里 if K image dim ordering t
  • 初始缩放在 d3 v4 中不起作用

    我已经进口了zoom像这样 import zoom from d3 zoom My svg和组container看起来像这样 const svg select root append svg attr width width attr he
  • Powershell 脚本查询 AD 中特定 OU 的计算机名称并导出

    我几乎 完全阅读 PowerShell 新手 我正在开发一个项目来清点我们网络上某些计算机上安装的软件 我找到了一个脚本来处理软件清单部分 但它依赖于带有计算机名称的文本文件进行扫描 我正在寻找一种方法来查询 AD 中特定 OU 的计算机名
  • const string& 构造函数和模板化 std::set find 的分段错误

    以下代码遇到了段错误const string 构造函数 并以 0 退出string view构造函数 我知道const string 这不是最好的方法 但根据我的理解 如果没有优化 临时string是由构造而成const char 然后它的
  • java中的@符号[重复]

    这个问题在这里已经有答案了 到底是做什么的 Object field做 我正在阅读一些从反编译器获取的代码 它用 Object name field stuff field stuff public static Object fieldN
  • 类型提示:方法应该接受任何 $art 对象

    我有一个 Collection 类 它有一个 add 方法 add 方法应该只接受对象 所以这是期望的行为 x 5 arbitrary non object obj new Foo arbitrary object collection n
  • 我可以使用变量来控制我使用的 PictureBox 吗?

    有没有办法可以使用变量来控制我在 Visual Basic 中使用的 PictureBox I e CurrentNumber 1 PictureBox CurrentNumber backcolour backcolour 您可以使用Me
  • 处理 BackGroundWorker 的正确方法

    这是处理 BackGroundWorker 的正确方法吗 我不确定在调用 Dispose 之前是否有必要删除事件 在 RunWorkerCompleted 委托中调用 Dispose 也可以吗 public void RunProcessA