C BackgroundWorker类详细说明
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
BackgroundWorker 类允许您在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。
若要在后台执行耗时的操作,请创建一个 BackgroundWorker,侦听那些报告操作进度并在操作完成时发出信号的事件。可以通过编程方式创建 BackgroundWorker,也可以将它从“工具箱”的“组件”选项卡中拖到窗体上。如果在 Windows 窗体设计器中创建 BackgroundWorker,则它会出现在组件栏中,而且它的属性会显示在“属性”窗口中。
若要设置后台操作,请为 DoWork 事件添加一个事件处理程序。在此事件处理程序中调用耗时的操作。若要启动该操作,请调用 RunWorkerAsync。若要收到进度更新通知,请对 ProgressChanged 事件进行处理。若要在操作完成时收到通知,请对 RunWorkerCompleted 事件进行处理。
您必须非常小心,确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。
BackgroundWorker 事件不跨 AppDomain 边界进行封送处理。请不要使用 BackgroundWorker 组件在多个 AppDomain 中执行多线程操作。
如果后台操作需要参数,请在调用 RunWorkerAsync 时给出参数。在 DoWork 事件处理程序内部,可以从 DoWorkEventArgs.Argument 属性中提取该参数。
有关 BackgroundWorker 的更多信息,请参见 如何:在后台运行操作。
摘自:http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker%28VS.80%29.aspx
.net 2.0 BackgroundWorker类详细用法
1. 从工具栏拖一个BackgroundWorker控件,设置其属性WorkerReportsProgress为true
2. 要让worker开始工作,执行如下代码:
mBackgroundWorker.RunWorkerAsync(arg);
这里有重写,如果不需要传递参数直接mBackgroundWorker.RunWorkerAsync();
3. 编辑DoWork事件代码:
e.Argument为mBackgroundWorker.RunWorkerAsync(arg);对应的参数
之所以使用进度条,肯定是有循环的,在循环中报告进度:
worker.ReportProgress(i * 100 / totalNum, obj );
其中第一个参数是当前进度的百分之多少,obj为你要传递的UserState,如果没有可以不要
4. 编辑ProgressChanged事件代码:
e.ProgressPercentage为进度的百分数,e.UserState为刚才传递过来的object
在这个事件中可以调用ui的进度条和其他控件:
mToolStripProgressBar.Value = e.ProgressPercentage;
5. 编辑RunWorkerCompleted事件代码:
工作完成了告诉ui
示例代码:一个简单的刷网页流量的小工具
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Threading;
namespace shua
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync(textBox1.Text);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = (BackgroundWorker)sender;
string url = e.Argument.ToString();
int num = int.Parse(textBox2.Text);
for (int i = 0; i < num; i++)
{
if (!worker.CancellationPending)
{
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
response.Close();
Thread.Sleep(100);
worker.ReportProgress(i * 100/ num, i);
}
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
label3.Text = e.UserState.ToString();
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("ok");
}
}
}
摘自:http://blog.csdn.net/lanwilliam/archive/2008/06/06/2516809.aspx
当要加载大量数据的时候,往往程序界面会卡一会,这时候使用BackgroundWorker来进行后台的操作加载数据就不会使界面卡了,而且还可以调用一个“正在加载”的窗体来更好的来进行交互。不能在DoWork里面调用就是!结束窗体的写在RunWorkerCompleted里面。
参考资料:
1.VS2005中BackgroundWorker组件的使用经验
2.C# BackgroundWorker实现WinForm异步操作的例子
3.在UI上使用BackgroundWorker
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
C BackgroundWorker类详细说明相关推荐
- .net 2.0 BackgroundWorker类详细用法
在WinForm中经常遇到一些费时的操作界面,比如统计某个磁盘分区的文件夹或者文件数目,如果分区很大或者文件过多的话,处理不好就会造成"假死"的情况,或者报"线程间操作无 ...
- console类详细解释
console类详细解释 微软链接https://docs.microsoft.com/zh-cn/dotnet/api/system.console?view=netframework-4.8 C# ...
- 【javase系列基础包装类及日历类详细总结,看完不会来找我~】
包装类及其日期类详细总结,希望大家能给小姐姐三联支持,感谢大家 1. 基本类型包装类 1.1 概述 1.2 Integer类的概述与使用 1.3 int和String的相互转换 1.4 案例-字符串中 ...
- backgroundworker类
作用:在单独的线程上执行操作. 命名空间: System.ComponentModel 程序集: System(位于 System.dll) 继承层次结构 System.Object Sys ...
- Tomcat 启动闪退问题解决集(八大类详细)
Tomcat启动闪退问题解决集(八大类详细) 本文目录: 一.Java环境不对,Tomcat 不同版本需要的Java环境不同. 二.环境变量没有配置好 三.Tomcat端口被占用 四.配置文件编码问题 ...
- 《Unity API常用方法和类详细讲解—Siki学院》课程学习笔记02
<Unity API常用方法和类详细讲解-Siki学院>课程学习笔记02 课时10 GameObject.Component和Object的千丝万缕的关系 一个游戏由多个场景组成,一个场景 ...
- 《Unity API常用方法和类详细讲解—Siki学院》课程学习笔记03
<Unity API常用方法和类详细讲解-Siki学院>课程学习笔记03 课时18-20协程及其执行 1.使用Coroutine实现颜色动画渐变 void Update(){if (Inp ...
- QApplication类详细描述
QApplication类管理图形用户界面应用程序的控制流和主要设置. 它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度.它也处理应用程序的初始化和结束,并且提供对话管理.它也处理 ...
- 集合框架源码分析四(Collections类详细分析)
我认为Collections类主要是完成了两个主要功能 1.提供了若干简单而又有用的算法,比如排序,二分查找,求最大最小值等等. 2.提供对集合进行包装的静态方法.比如把指定的集合包装成线程安全的 ...
最新文章
- PAT(甲级)2018年秋季考试 7-1 Werewolf - Simple Version
- SQL DBHelp.cs 操作数据库的底层类
- redis watch使用场景_redis不得不会的事务玩法
- 杂牌手柄模拟xboxone手柄_震了,Xbox One 精英手柄2代摸了一次就不舍得放下了
- Oracle 10g、11g :RAC关闭、启动、重启步骤
- CVPR 2021 机器学习及多模态最新进展分享
- python迭代_Python迭代
- 大数据系统由哪些核心组件构成
- Redis缓存持久化
- ❤️Docker教程小白实操入门 教程合集❤️
- 5G时代|淘宝直播高画质低延时技术探索
- 购物直播APP开发系统方案
- 七大室内定位技术PK(转自3Snews)
- 小程序流量主怎么赚钱?小程序流量主怎么变现?
- xshell6无法卸载、重新安装【1628: 完成基于脚本的安装失败】
- 《NEURAL READING COMPREHENSION AND BEYOND》解读(陈丹琦博士论文)
- R语言逻辑回归预测分析付费用户
- 制作U盘启动来安装Linux系统的具体方法(图文)
- MySQL 存储过程笔记
- GameFramework篇:Network模块案例解读(一:准备工作)
热门文章
- 阿里云原生数据库POLARDB压力测试报告
- 微服务面试 - 微服务简单介绍
- 消息队列面试 - 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?
- Spring技术栈系列教程-- SpringMVC 、SpringBoot 、SpringCloud
- CCNA初认识——OSPF(开放式最短路径优先协议)配置命令
- Linxu:磁盘分区
- 使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
- 看完这篇你们团队的代码也很规范
- 构建Docker镜像指南,含实战案例
- 【Java】用while循环实现1+2+3......+100