iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c#中使用BackgroundWorker的实现
  • 652
分享到

c#中使用BackgroundWorker的实现

2024-04-02 19:04:59 652人浏览 八月长安
摘要

在客户端中,为了防止界面假死状态,或者不能拖动界面,可以使用BackgroundWorker。 1.在界面上拖动一个BackgroundWorker,label,进度条和2个butt

在客户端中,为了防止界面假死状态,或者不能拖动界面,可以使用BackgroundWorker。

1.在界面上拖动一个BackgroundWorker,label,进度条和2个button控件。BackgroundWorker也可以选择在cs文件中new。

2.bgWorker_DoWork事件中接收到bgWorker.RunWorkerAsync("11111")

3.bgWorker_ProgessChanged事件中接收到bgWorker.ReportProgress方法传递过来的参数

 4.bgWorker_WorkerCompleted事件中主要处理线程暂停或者终止时的提示

5.中途取消操作后,也就是执行bgWorker.CancelAsync()此方法。bgWorker.CancellationPending会变成true

所有代码:

    public partial class FORM1 : Form
    {
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void btnStart_Click(object sender, EventArgs e)
        {
            if (bgWorker.IsBusy)              //判断是否正在运行异步操作
                return;
            this.progressBar1.Maximum = 100;  //设置进度条最大值
            this.btnStart.Enabled = false;
            this.btnStop.Enabled = true;
            bgWorker.RunWorkerAsync("11111");   //给业务传递参数,就是把前台的要处理的参数传递进去
        }
 
        public void bgWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            //业务处理
            object s = e.Argument;   //这的e.Argument就是上面传递的参数 11111
            for (int i = 0; i <= this.progressBar1.Maximum; i++)
            {
                if (bgWorker.CancellationPending)     //此处关联的是btnStop_Click事件中的这个bgWorker.CancelAsync();如果这个触发了,那么就会停止。
                {
                    e.Cancel = true;
                    return;
                }
                else
                {
                    bgWorker.ReportProgress(i, "222222"); //向bgWorker_ProgessChanged事件传递参数,第一个是进度的参数,第二个是你要处理业务的参数
                    System.Threading.Thread.Sleep(1);
                }
            }
        }
 
        public void bgWorker_ProgessChanged(object sender, ProgressChangedEventArgs e)
        {
            //页面处理
            string state = (string)e.UserState;//接收上bgWorker.ReportProgress方法传递过来的参数userState
            this.progressBar1.Value = e.ProgressPercentage;
            this.label1.Text = "处理进度:" + Convert.ToString(e.ProgressPercentage) + "%";
            //label2.Text = e.ProgressPercentage.ToString();
        }
 
        public void bgWorker_WorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                MessageBox.Show(e.Error.ToString());
                return;
            }
            if (!e.Cancelled)
                this.label1.Text = "处理完毕!";
            else
                this.label1.Text = "处理终止!";
 
        }
 
        private void btnStop_Click(object sender, EventArgs e)
        {
            this.btnStart.Enabled = true;
            this.btnStop.Enabled = false;
            bgWorker.CancelAsync();
        }
 
    }

多个线程的话,在A_DoWork开启另外一个bw,可以一直套用。

总结

主要是3个事件:

  • bgWorker_DoWork:业务内部处理大量数据的地方,后台默默处理数据。(关于界面控件的东西,这里不要出现,比如给控件赋值,这里不要出现)
  • bgWorker_ProgessChanged:每次业务内部处理完成一部分时,就会告诉界面我处理了什么,主要是给前台显示信息。(这里可以与前台一起交互)
  • bgWorker_WorkerCompleted:终止或者完成后就会进入(这里可以是完成数据后,给控件赋值)

3个方法:

  • RunWorkerAsync:向业务内部传递处理数据的方法,传递集合,数值之类的
  • ReportProgress:把处理的进度告诉界面
  • CancelAsync:取消操作会执行此方法

 到此这篇关于C#中使用BackgroundWorker的实现的文章就介绍到这了,更多相关c# BackgroundWorker内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: c#中使用BackgroundWorker的实现

本文链接: https://www.lsjlt.com/news/152388.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c#中使用BackgroundWorker的实现
    在客户端中,为了防止界面假死状态,或者不能拖动界面,可以使用BackgroundWorker。 1.在界面上拖动一个BackgroundWorker,label,进度条和2个butt...
    99+
    2024-04-02
  • C#中的backgroundWorker类怎么使用
    BackgroundWorker类是C#中用于在后台执行操作的工具类。以下是使用BackgroundWorker类的常见步骤:1. ...
    99+
    2023-08-15
    C#
  • C#使用BackgroundWorker控件
    在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界...
    99+
    2024-04-02
  • C#中怎么使用BackgroundWorker控件
    这篇文章主要介绍了C#中怎么使用BackgroundWorker控件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中怎么使用BackgroundWorker控件文章都会有所收获,下面我们一起来看看吧。在我们...
    99+
    2023-06-29
  • C#中BackgroundWorker类用法总结
    目录1、属性:WorkerReportsProgress WorkerSupportsCancellation CancellationPending IsBusy 2、方法:Run...
    99+
    2024-04-02
  • C#中backgroundWorker类的用法详解
    BackgroundWorker类是C#中一个非常常用的多线程类,它可以在后台运行一个操作,并且可以与UI线程进行交互。下面是Bac...
    99+
    2023-08-14
    C#
  • C#中Backgroundworker与Thread的区别
    目录1.Backgroundworker2.Thread3.总结最近项目要用到,窗体Form程序要在后台开启几个子线程,负责和其他端进行通信,异步读写,并且来更改UI。在网上查了有B...
    99+
    2024-04-02
  • C#中Backgroundworker与Thread的区别是什么
    本篇内容介绍了“C#中Backgroundworker与Thread的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.Backg...
    99+
    2023-07-02
  • C++中list的使用与模拟实现
    目录一、list的介绍以及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity...
    99+
    2024-04-02
  • C++中priority_queue的使用与模拟实现
    目录priority_queue的使用priority_queue简介priority_queue的使用priority_queue的模拟实现priority_queue的使用 pr...
    99+
    2024-04-02
  • c++中vector的使用和模拟实现
    一、接口介绍 1、插入数据 void push_back(const T& x) 在当前vector尾部插入x,如果容量不够扩大二倍。 iterator insert(it...
    99+
    2024-04-02
  • C#中怎么使用Unity实现IOC
    这篇文章主要介绍“C#中怎么使用Unity实现IOC”,在日常操作中,相信很多人在C#中怎么使用Unity实现IOC问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#中怎么使用Unity实现IOC”的疑惑有所...
    99+
    2023-06-29
  • C#使用IronPython调用Python的实现
    目录一、前言二、IronPython安装配置三、基础使用及标准库使用1、创建python脚本2、调用脚本四、IronPython调用第三方库1、创建python虚拟环境2、pytho...
    99+
    2023-02-08
    C# IronPython调用Python IronPython调用Python
  • C++ map的简单使用实现
    map和set的底层都是通过红黑树来实现的,但并不是原生态的红黑树,而是经过改造后的红黑树。且容器都会在各自的类中添加一些独特的函数来解决各自适配的问题 map和set底层是改造后的...
    99+
    2024-04-02
  • C#使用DevExpress中的XtraCharts控件实现图表
    目录一、总体概述二、chartControl层\XYDiagram层1.当坐标轴的数据类型是数字时2. 当前数据类型是字符串时3.当前数据类型是时间三、实例1.饼状图1.1、添加Ch...
    99+
    2024-04-02
  • 在C# 中使用Socke实现一个UDP
    这篇文章给大家介绍在C# 中使用Socke实现一个UDP,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、概述UDP和TCP是网络通讯常用的两个传输协议,C#一般可以通过Socket来实现UDP和TCP通讯,由于.NE...
    99+
    2023-06-06
  • C#使用Unity实现IOC
    一、什么是IOC 学习IOC之前先来了解一个依赖导致原则(DIP),依赖导致原则是IOC的核心原理。 依赖导致:即上层模块不应该依赖于低层模块,二者应该通过抽象来依赖。依赖于抽象,而...
    99+
    2024-04-02
  • C/C++使用C语言实现多态
    目录1.多态的概念1.1什么是多态?1.2为什么要用多态呢?1.3多态有什么好处?2.多态的定义及实现2.1继承中构成多态的条件2.2虚函数2.3虚函数的重写2.4C++11 ove...
    99+
    2024-04-02
  • Linux中rm命令使用及C/C++代码实现的方法
    本篇内容介绍了“Linux中rm命令使用及C/C++代码实现的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言rm 命令是 Unix/...
    99+
    2023-06-30
  • C#中使用Spire.XLS来操作Excel数据的实现
    目录一、Spire.XLS的安装与引用二、Spire.XLS的基本用法1.打开和读取Excel文件2.读取工作表中的数据Spire.XLS是一个功能强大的C#组件,它提供了对Exce...
    99+
    2023-05-14
    C# Spire.XLS操作Excel C# 操作Excel
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作