c# BackgroungWorker 用法总结

C#线程(七)BackgroungWorker 8. BackgroungWorker8.1.简介BackgroundWorker是一个在System.ComponentModel命名空间下帮助类,它管理着工作线程。它提供了以下特性:·        提供程序进度,完成度和退出的标准方案·        实现了IComponent接口,允许它参与Visual Studio设计器·        在工作线程之上做异常处理·        更新Wi... 阅读详情

1.属性

①IsBusy:
类型:bool;右值。  如果该控件正在运行,输出true;控件停止工作了,返回false。

②CancellationPending:

类型:bool;右值。  如果CancelAsync方法被调用,其值被设置为true,不然为false(默认)。

③WorkerReprotsProgress:

类型:bool;左右值。  如果需要报告进度,设置其为true;不然则false。

④WorkerSupportsCancellation:

类型:bool;左右值。  如果控件在运行时需要提供取消功能,设置其位true;不然则false。

 

2.事件

①DoWork:

触发条件:调用RunWorkerAsync方法。

功能:开启一个异步线程,在其上工作。实现程序的异步性。

②OnProgressChanged:

触发条件:调用ReportProgress方法。

功能:报告线程工作情况。

③OnRunWorkerCompleted:

触发条件:RunWorkerAsync方法执行结束。

功能:对线程处理结果操作。

 

3.方法

①RunWorkerAsync:void

参数表:(void)/(object)。//触发DoWork事件;若有object,将其作为关注参数传递给DoWork事件的委托方法

②ReportProgress:void

参数表:(int)/(int, object)。//触发OnProgressChanged事件;传递给OnProgressChanged事件的委托方法

③CancelAsync:void

参数表:(void)。//提出取消线程请求,设置CancellationPending为true。当DoWork的委托方法中参数Cancel被设置为true,才是线程真正被取消。

 

4.要点概要

①DoWork事件结束将自动触发OnRunWorkerCompleted事件;而参数通过Result对象传递(事件必须是完成的,如果事件被取消Result将不被传递给OnRunWorkerCompleted事件)。

②CancelAsync方法只是请求取消,实质可能根本不取消。它只是把CancellationPending设置为true而已。真正的取消必须在DoWork事件的胃痛方法中,把重要参数Cancel设置为true。此时OnRunWorkerCompleted事件的委托方法中的Canceled值被相应设置为true。

③取消线程的方法:

方法一:将DoWork事件的委托方法写成循环行,每次对CancellationPending进行判断,为true,则设置Cancle为true。不然则继续相应操作。

方法二:将DoWork事件的委托方法的主体写成一个委托类型,然后调用委托的异步执行功能(BeginInvoke方法),而在主线程中循环判断CancellationPending的值,做相应操作。

方法三:这个方法有个前提是:虽然在窗体设计中需要执行的代码可能是不可循环的,但处理方法实际是循环或递归的。而且是可修改的。

              适用环境:在已经调用了多线程的情况下,用委托的异步执行功能达不到很好效果的情况下。

              方法关键:在处理方法的循环中或每一层中,加入抛出异常的条件。想取消时,即抛出异常。

此方法其实抛弃了BackgroundWorker线程的CancelAsync方法,自己写了个取消方法。

【蓝牙专题】HCI协议解析 一、概念: 很多人接触蓝牙,是从HCI开始,因为HCI是主机控制接口协议(Host Controller Interface),蓝牙命令通过HCI来发送到Controller; 1、架构 如下图,HCI通过物理接口(USB、UART等)或虚拟接口,传递数据到Controller,Controller也通过同样的接口发送接收数据,这里注意到HCI层是在L2CAP层之下,LMP层之上; HCI 阅读详情

相关推荐

Backblaze 2025全年硬盘故障率报告解读

作为长期追踪存储行业动态的科技博主,每年/季度Backblaze的Drive Stats报告都是我重点关注的核心内容——不同于厂商发布的实验室数据,Backblaze以近13年、数十万片企业级硬盘的真实运行数据为基础,其年化故障率(AFR)、寿命趋势等结论,直接反映了硬盘在严苛数据中心环境下的真实表现,无论是企业存储选型还是个人高端存储参考,都具备极高的实用价值。2025年末,Backblaze发布了第13年的年度收官报告,涵盖2025年Q4、全年及终身硬盘可靠性数据。

存储随笔 4018

C# BackgroundWorker

C# BackgroundWoker的使用,帮助程序员执行耗时操作的同时不会造成界面卡顿。

嵌入式小白 1063

避坑指南:SAP成本中心分割结构配置常见错误及解决(含KA06/KL01前置步骤)

本文深入解析了SAP成本中心会计中分割结构配置的关键步骤与常见错误。重点强调了配置前必须通过KA06创建次级成本要素(类别42)和通过KL01创建活动类型这两个核心前置步骤,并详细剖析了在OKES中定义分割规则及版本时的高频报错原因与解决方案,帮助顾问和运维人员有效规避配置陷阱,确保成本分摊的准确性。

pear55的博客 865

C# BackgroupWorker,ProgressBar

任务后台工作,并显示进度:

lvxingzhe3的博客 262

MOOS-ivp 实验一 MOOS软件的安装与执行

MOOS-ivp实验一 实验一步骤总结 文章目录MOOS-ivp实验一前言一、实验一1.下载软件2.安装必要的插件3.安装后检查4.路径添加5.执行示例文件总结 前言 在moos学习过程中,我觉得最好把学习的每一步骤都总结一下,方便日后进行回顾。moos官网设置了十八个实验,涉及到了moos的各个方面,完成这些实验也是moos入门的好办法。 一、实验一 实验一主要内容仅仅是软件的安装,仅仅这一步就花费了我接近两天的时间。主要问题发生在linux系统的配置问题上。 1.下载软件 svn co https:

weixin_44151170的博客 6669

ABAP - Function ALV 11 - 单元格下拉框

【代码】ABAP - Function ALV 11 - 单元格下拉框。

HeathlX的博客 1814

C#多线程之BackgroundWorker

一、BackgroundWorker介绍 我们有时要执行耗时的操作,在该操作未完成之前操作用户界面,会导致用户界面停止响应。解决的方法就是新开一个线程,把耗时的操作放到线程中执行,这样就可以在用户界面上进行其它操作。新建线程可以用 Thread 类实现多线程同时操作。简单的方法可以通过 BackgroundWorker 类实现。BackgroundWorker是·net里用来执行多线程任务的控件,它允许编程者在一个单独的线程上执行一些操作。   常用方法   1.RunWorkerAsync 开始执行

sinat_31608641的博客 1777

PTC-6-2004汽轮机性能计算源代码,pycharm-包括试验计算、一类修正、二类修正-以CC350-16.7/0.98/0.5/538/538型汽轮机为例,5万7千字,过程不易欢迎打赏

汽轮机性能计算完整源代码-简化试验-包括试验计算一类修正计算和二类修正计算目录图 1 工程结构。

weixin_43441028的博客 999

BackgroundWorker.IsBusy此屬性值改變的時間點

BackgroundWorker.IsBusy此屬性值改變的時間點 BackgroundWorker.IsBusy此屬性值改變的時間點 以前都沒有很注意這個屬性改變的時間點,最近遇到需要先判定是否該BackgroundWorker是否還在執行中,然後才進行下一步驟, 但在進行下一步驟前又需要先清除此次的資料,而在BackgroundWorker.RunWorkerComplete

陈家小子 2633

【SpringBoot 3.x 第56节】再见 Feign?原生 HTTP 接口强势上位,这才是微服务调用的正确姿势!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1017

OpenHarmony AI系列:神经网络处理单元(NPU)驱动架构与实现详解

NPU(Neural Processing Unit,神经网络处理单元)是专门为神经网络计算设计的硬件加速器。在OpenHarmony系统中,NPU驱动是通过NNRT(Neural Network Runtime,神经网络运行时)框架实现的,它作为中间桥梁连接上层AI推理框架和底层NPU硬件,实现AI模型的跨芯片推理计算。

m0_67505153的博客 665

C#中Backgroundworker类详解

3.BackgroundWorker.OnProgressChanged(ProgressChangedEventArgs) 方法。2.BackgroundWorker.OnDoWork(DoWorkEventArgs) 方法。3.BackgroundWorker.RunWorkerCompleted 事件。2.BackgroundWorker.ProgressChanged 事件。2.BackgroundWorker.IsBusy 属性。1.BackgroundWorker.DoWork 事件。

SamaHddd的博客 1483

【车载以太网】【架构】整体架构与协议标准

车载以太网架构图 应用层:DHCP /SOMEIP/DoIP/XCP/UDPNM 传输层:TCP/IP 网络层:IPv4/IPv6/ARP/ICMP 链路层:IEEE Ethernet MAC+VLAN 物理层:Ethernet PHY: 100BASE-T1/1000BASE-T1/100BASE-Tx

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 8356

BackgroungWorker

usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Linq; usingSystem.Text; usingSystem.Windows.Forms; usi...

weixin_30252155的博客 80

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

c#中BackGroundWorker控件

一、BackGroundWorker工作步骤 1.向窗体中拖入一个BackGroundWorker控件。 2.在某个方法或者事件中,调用BackGroundWorker的RunWorkerAsync()方法。 3.该方法为异步操作,将自动引发BackGroundWorker的DoWork事件。 4.调用ReportProgress方法将引发Pro...

weixin_33704591的博客 191

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

c#中使用BackgroundWorker

在客户端中,为了防止界面假死状态,或者不能拖动界面,可以使用BackgroundWorker。 1.在界面上拖动一个BackgroundWorker,label,进度条和2个button控件。BackgroundWorker也可以选择在cs文件中new。 2.bgWorker_DoWork事件中接收到bgWorker.RunWorkerAsync("11111") 3.bgWorker_ProgessChanged事件中接收到bgWorker.ReportProgress方法传递过来的参数

故里2130 6607

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C#【多线程篇】BackgroundWorker类使用总结

查询了一下MSDN文档,其中微软就BackgroundWorker类的功能有这么一个描述(英文的,根据个人理解翻译):BackgroundWorker类允许您在单独的线程上执行某个可能导致用户界面(UI)停止响应的耗时操作(比如文件下载数据库事务等),并且想要一个响应式的UI来反应当前耗时操作的进度。 可以看的出来,BackgroundWorker组件提供了一种执行异步操作(后台线程)的同时,并...

星Yeah 的博客 1900

C# BackgroundWorker的使用

C# BackgroundWorker的使用

wangnaisheng的专栏 2790

[C#]BackgroundWorker控件

BackgroundWorker在后台持续运行以完成某项工作,并不时地与主线程进行通信。

FL1768317420的博客 1127

C# BackgroundWorker使用讲解

首先我们要知道为什么要用这个 如果你需要异步操作的话,不影响前台UI操作的吗,那么就可以使用这个。更方便的进行异步操作。 同时可以跨线程调用其他的控件。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.T.

zq爱生活爱代码的博客 1168

基于事件的异步模式 关于BackgroundWorker类的使用

若要在后台执行耗时的操作,请创建一个 BackgroundWorker,侦听那些报告操作进度并在操作完成时发出信号的事件。 这里使用《C#高级编程》里面的一个例子说明这个类的使用:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using S...

weixin_30414635的博客 107

轻松做异步 - BackgroundWorker源代码(c#)

using System;using System.ComponentModel; namespace Unique.Shavit.UI{ #region BackgroundWorker public class BackgroundWorker {  bool m_CancelPending = false;  bool m_ReportsProgress = false;  bool m_S

苦于思考 3286

C#中BackgroundWorker的概念与用法详解

在一个 Windows 窗体应用程序中,需要从网络下载一个较大的文件,为了避免下载过程中 UI 界面卡死,并且能够显示下载进度,同时允许用户取消下载任务,可以使用 BackgroundWorker。在处理此事件时,需要注意不能在该事件处理程序中直接操作 UI 元素,因为此事件是在后台线程中触发的。在这个示例中,当用户点击开始下载按钮时,BackgroundWorker 开始执行后台任务,模拟下载过程并定期报告进度。在主线程中处理此事件,可以在此处更新 UI 组件以显示进度信息,如进度条的值、状态文本等。

m0_57417006的博客 2059

[原译]多线程揭秘

多线程揭秘 Demo下载:多线程演示Demo 介绍 本文将通过一些例子来展示.net 中如何实现多线程,涉及到以下四部分。 1 .线程概念 2 .如何实现多线程 3 .如何确保线程安全 4 .死锁 什么是进程 一个进程就是一个可执行文件运行的操作系统上下文环境。它被用来分隔虚拟地址空间,线程,对象句柄(指向类似文件这样的资源的指针),以及环境变量,进程还有一些类似优先级类和...

weixin_34352449的博客 251

C#中BackgroundWorker的介绍

BackgroundWorker可以解决执行耗时操作界面无法响应的问题,另外也提供异步操作取消以及下载进度报告等;它常用的属性有: (1).CancellationPending属性,用来指示应用程序是否已请求取消后台操作; (2).IsBusy属性,指示异步操作是否正在运行; (3).WorkReportsProgress属性,指示Backgroundworker能否报告进度; ...

weixin_30763455的博客 217

C# (VS2019 Frameworks) 背景程序组件BackgroundWorker 的基本和使用

双击会自动进入背景处理程序DoWork方法:在这里写你的背景动作。// 在这里编写长时间运行的任务当然,你双击的时候,绑定是自动的。

山云的专栏 1497
上一篇: Win7 Cleaner —— 自己的系统清理软件
下一篇: 汇编程序的结构——Hello World !
Jay_Chu
博客等级 码龄16年 5粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值