为什么 BackgroundWorker 不需要在 ProgressChanged 事件处理程序中调用?

2023-12-12

自从ProgressChanged事件处理程序是从某个地方引发的DoWork事件处理程序,不应该在异步操作线程上调用它们吗?DoWork也运行在 UI 线程上,而不是 UI 线程上,因此需要 Invoke 或BeginInvoke操纵控制?

我的猜测是,某些魔法正在发生ReportProgress方法,但它如何知道哪一个是调用该方法的正确线程ProgressChanged事件处理程序打开?


你打电话时RunWorkerAsync, the BackgroundWorker内部创建一个新的AsyncOperation与当前同步上下文关联,通过检索AsyncOperationManager.SynchronizationContext静态属性。

该同步上下文将是派生自的类的实例SynchronizationContext。具体类型取决于您的应用程序使用的同步模型提供程序。如果您运行的是 Windows 窗体,则为WindowsFormsSynchronizationContext;在 WPF 上;这将是DispatcherSynchronizationContext.

当您随后致电ReportProgress在后台线程上,BackgroundWorker会内部调用Post就前述的SynchronizationContext实例,从而将操作异步分派给关联的线程。

在 Windows 窗体中,这是作为Control.BeginInvoke称呼;在 WPF 上,它变成了Dispatcher.BeginInvoke call.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 BackgroundWorker 不需要在 ProgressChanged 事件处理程序中调用? 的相关文章

  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • Javascript 无缘无故地将浮点数转换为整数

    我编写了一个函数 它的行为根据其参数的数字类型而有所不同 整数或浮点数 使用这个问题中的一些代码如何检查一个数字是浮点数还是整数 很容易检测是否浮动 但后来我偶然发现了 javascript 强制转换的情况1 0 to 1如果您使用该号码调
  • 莫里斯图未更新

    我的更新有问题morris js条形图 当页面加载时 我有以下函数 它运行良好并创建了一个漂亮的图表 document ready function if projectViewTotal length chart Morris Bar e
  • 从数据库中检索一行作为 Hibernate 中的映射

    Table Players ID name email age 1 bob null 23 该表是类的实例Player被持久化 每个实例一行 没有组合等 冬眠Session 我如何获得该行 假设 id PK 等于 1 作为 Java 地图
  • 具有波斯语/阿拉伯语字符的Python 3 print() 函数[重复]

    这个问题在这里已经有答案了 我简化了代码以便更好地理解 这是问题所在 case 1 coding utf 8 text also using u results the same print text output UnicodeEncod
  • 在 AWS Lambda 中将 DynamoDB 数据格式化为普通 JSON

    我在用着AWS Lambda扫描数据DynamoDB桌子 这就是我得到的回报 videos file S file1 mp4 id S 1 canvas S This is Canvas1 file S main mp4 id S 0 ca
  • 如何将 CSV 文件直接发送到 FTP 服务器

    我的问题是如何将 CSV 文件发送到 FTP 服务器 如您所见 以下脚本是我当前的代码 代码示例 def download outage info all request upload data download data form req
  • WordPress 致命错误:第 1832 行的 wp-includes/wp-db.php 中允许的内存大小 536870912 字节已耗尽(尝试分配 77 字节)

    我最近注意到我的 WordPress 网站有时会收到 500 内部服务器错误 我检查了日志 有很多行 例如 2016 年 10 月 3 日星期一 01 25 24 357439 fcgid 警告 pid 12840 客户端 83 27 21
  • 在父 div 内对角排列 2 个 div

    我试图在父 div 内排列 2 个 div 这样看起来父 div 被对角线分成两部分 下图将显示需要什么 这是我尝试过的代码 App js import React Component from react import App css c
  • Cube on Cube 碰撞检测算法?

    我试图找到最有效的方法来检查两个任意大小的立方体是否相互碰撞 立方体的边长不一定都相等 盒子是可能的 考虑到这些限制 我如何有效地检查它们是否发生冲突 每个盒子有 24 个顶点 谢谢 它们是轴对齐的 由于两个框都是轴对齐的 因此您可以比较它
  • 升级到 VS2010 和 Re#5 后 SQLite 相关的 nUnit 测试出现问题

    使用 ReSharper5 转换为 Visual Studio 2010 后 我的一些单元测试开始失败 更具体地说 这适用于使用 NHibernate 和 SQLite 的所有单元测试 这个问题似乎与 SQLite 有关 不涉及NHiber
  • 如何在没有边框的表单周围添加阴影?

    我试图弄清楚如何使用 WinForms 在无边框表单周围添加完整的阴影 我正在考虑在表格的四个侧面周围添加阴影 我尝试过使用 DropShadow 类 尽管它只将阴影添加到底角和右侧角 我之前在搜索中多次看到这个问题被问到 但我发现没有任何
  • 如何仅在线性布局的一侧绘制边框?

    我能够将边框绘制到线性布局 但它是在所有侧面绘制的 我想将其限制为仅在右侧 就像在 CSS 中所做的那样 border right 1px Solid red 我已经尝试过这个 但它仍然吸引各方
  • CSS 变量在 Microsoft Edge 中的工作方式是否有所不同?

    我正在开发一个网站 并针对 Firefox 和 Chrome 对其进行了优化 该项目包含一个名为base css它包含在所有页面中 并且包含一些全局设置和定义 包括我用来存储颜色值的变量列表 如下所示 root yellow 1 fff8e
  • Internet Explorer 的永恒重新加载页面

    我在 Internet Explorer 7 上使用 FB 应用程序时遇到问题 我正在使用FB前一段时间提供的这段代码 auth url http www facebook com dialog oauth client id FACEBO
  • 指令集架构的定义是什么?

    我试图弄清楚指令集架构 ISA 到底是什么 根据我所读到的内容 我有两种解释 我的第一个解释是 ISA 是所有寄存器 汇编指令和伪指令 汇编指令以及构成汇编语言的指令格式的集合 可用于对实现指令集的处理器进行编程 我的第二种解释是 ISA
  • 清除 C# 表单上所有控件的最佳方法是什么?

    我记得不久前看到有人问过类似的问题 但我进行了搜索 但找不到任何东西 我试图想出最干净的方法来将表单上的所有控件清除回默认值 例如 清除文本框 取消选中复选框 你会怎么做呢 到目前为止我想出的是这样的 public static class
  • C 宏的作用域规则

    我不是一个 C 程序员 但我假设 C 宏几乎是一种查找和替换功能 其中预处理器获取宏定义并将其放在它看到宏名称的任何位置 这是 Dragon Book 的动态范围规则及其如何应用于宏的示例 define a x 1 int x 2 void
  • 在 null Laravel 5.4 上调用成员函数 connection()

    尝试编写一个单元测试 我需要执行 sql 查询 class UpdateThrowsTest extends TestCase protected bgame protected game id 95 public function set
  • 是否可以声明升序列表?

    我可以像这样制作升序整数列表 findall L between 1 5 L List 我知道我还可以使用以下方法生成值 length X 但我不认为我可以在 findall 中使用它 就像下面的循环一样 findall X length
  • 为什么 BackgroundWorker 不需要在 ProgressChanged 事件处理程序中调用?

    自从ProgressChanged事件处理程序是从某个地方引发的DoWork事件处理程序 不应该在异步操作线程上调用它们吗 DoWork也运行在 UI 线程上 而不是 UI 线程上 因此需要 Invoke 或BeginInvoke操纵控制