分享一下我老师大神的人工智能教程!零基础,通俗易懂!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; 
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类详细说明相关推荐

  1. .net 2.0 BackgroundWorker类详细用法

    在WinForm中经常遇到一些费时的操作界面,比如统计某个磁盘分区的文件夹或者文件数目,如果分区很大或者文件过多的话,处理不好就会造成"假死"的情况,或者报"线程间操作无 ...

  2. console类详细解释

    console类详细解释 微软链接https://docs.microsoft.com/zh-cn/dotnet/api/system.console?view=netframework-4.8 C# ...

  3. 【javase系列基础包装类及日历类详细总结,看完不会来找我~】

    包装类及其日期类详细总结,希望大家能给小姐姐三联支持,感谢大家 1. 基本类型包装类 1.1 概述 1.2 Integer类的概述与使用 1.3 int和String的相互转换 1.4 案例-字符串中 ...

  4. backgroundworker类

    作用:在单独的线程上执行操作. 命名空间:   System.ComponentModel 程序集:  System(位于 System.dll) 继承层次结构 System.Object   Sys ...

  5. Tomcat 启动闪退问题解决集(八大类详细)

    Tomcat启动闪退问题解决集(八大类详细) 本文目录: 一.Java环境不对,Tomcat 不同版本需要的Java环境不同. 二.环境变量没有配置好 三.Tomcat端口被占用 四.配置文件编码问题 ...

  6. 《Unity API常用方法和类详细讲解—Siki学院》课程学习笔记02

    <Unity API常用方法和类详细讲解-Siki学院>课程学习笔记02 课时10 GameObject.Component和Object的千丝万缕的关系 一个游戏由多个场景组成,一个场景 ...

  7. 《Unity API常用方法和类详细讲解—Siki学院》课程学习笔记03

    <Unity API常用方法和类详细讲解-Siki学院>课程学习笔记03 课时18-20协程及其执行 1.使用Coroutine实现颜色动画渐变 void Update(){if (Inp ...

  8. QApplication类详细描述

    QApplication类管理图形用户界面应用程序的控制流和主要设置. 它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度.它也处理应用程序的初始化和结束,并且提供对话管理.它也处理 ...

  9. 集合框架源码分析四(Collections类详细分析)

    我认为Collections类主要是完成了两个主要功能  1.提供了若干简单而又有用的算法,比如排序,二分查找,求最大最小值等等.  2.提供对集合进行包装的静态方法.比如把指定的集合包装成线程安全的 ...

最新文章

  1. PAT(甲级)2018年秋季考试 7-1 Werewolf - Simple Version
  2. SQL DBHelp.cs 操作数据库的底层类
  3. redis watch使用场景_redis不得不会的事务玩法
  4. 杂牌手柄模拟xboxone手柄_震了,Xbox One 精英手柄2代摸了一次就不舍得放下了
  5. Oracle 10g、11g :RAC关闭、启动、重启步骤
  6. CVPR 2021 机器学习及多模态最新进展分享
  7. python迭代_Python迭代
  8. 大数据系统由哪些核心组件构成
  9. Redis缓存持久化
  10. ❤️Docker教程小白实操入门 教程合集❤️
  11. 5G时代|淘宝直播高画质低延时技术探索
  12. 购物直播APP开发系统方案
  13. 七大室内定位技术PK(转自3Snews)
  14. 小程序流量主怎么赚钱?小程序流量主怎么变现?
  15. xshell6无法卸载、重新安装【1628: 完成基于脚本的安装失败】
  16. 《NEURAL READING COMPREHENSION AND BEYOND》解读(陈丹琦博士论文)
  17. R语言逻辑回归预测分析付费用户
  18. 制作U盘启动来安装Linux系统的具体方法(图文)
  19. MySQL 存储过程笔记
  20. GameFramework篇:Network模块案例解读(一:准备工作)

热门文章

  1. 阿里云原生数据库POLARDB压力测试报告
  2. 微服务面试 - 微服务简单介绍
  3. 消息队列面试 - 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?
  4. Spring技术栈系列教程-- SpringMVC 、SpringBoot 、SpringCloud
  5. CCNA初认识——OSPF(开放式最短路径优先协议)配置命令
  6. Linxu:磁盘分区
  7. 使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
  8. 看完这篇你们团队的代码也很规范
  9. 构建Docker镜像指南,含实战案例
  10. 【Java】用while循环实现1+2+3......+100