首页 > 其他分享 >BackgroundWorker与DoWorkEventArgs详解

BackgroundWorker与DoWorkEventArgs详解

时间:2023-05-29 15:46:08浏览次数:50  
标签:DoWorkEventArgs sender DoWork BackgroundWorker bw arg 详解

在学习公司给的项目过程中遇到了一些不懂得地方,在此记录下来。

1、BackgroundWorker(在单独的线程上执行操作)

首先在Microsoft学习BackgroundWorker基础知识,了解目标属性与方法。

BackgroundWorker 类 (System.ComponentModel) | Microsoft Learn

下面是一些对我有帮助的文章,在此贴出来方便学习。
C# BackgroundWorker 详解 - sparkdev - 博客园 (cnblogs.com)

2、DoWorkEventArgs 类(为 DoWork 事件处理程序提供数据)

DoWorkEventArgs 类 (System.ComponentModel) | Microsoft Learn

下面的代码示例演示如何使用 DoWorkEventArgs 类来处理 DoWork 事件。

 1 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
 2 {
 3     // Do not access the form's BackgroundWorker reference directly.
 4     // Instead, use the reference provided by the sender parameter.
 5     BackgroundWorker bw = sender as BackgroundWorker;
 6 
 7     // Extract the argument.
 8     int arg = (int)e.Argument;
 9 
10     // Start the time-consuming operation.
11     e.Result = TimeConsumingOperation(bw, arg);
12 
13     // If the operation was canceled by the user, 
14     // set the DoWorkEventArgs.Cancel property to true.
15     if (bw.CancellationPending)
16     {
17         e.Cancel = true;
18     }
19 }

 

  1. private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e):定义了一个名为 backgroundWorker1_DoWork 的方法,该方法是 BackgroundWorkerDoWork 事件的处理方法。DoWork 事件在后台执行长时间运行的操作。

    • sender:事件的发送者,通常是 BackgroundWorker 对象本身。
    • e:包含事件数据的 DoWorkEventArgs 对象,可以通过它访问传递给事件处理方法的参数,并设置操作的结果或取消标志。
  2. BackgroundWorker bw = sender as BackgroundWorker;:将 sender 强制转换为 BackgroundWorker 对象,并赋值给 bw 变量。这样可以访问 BackgroundWorker 对象的属性和方法。

  3. int arg = (int)e.Argument;:从 DoWorkEventArgs 对象的 Argument 属性中提取传递给事件处理方法的参数,并将其强制转换为整数类型,并赋值给 arg 变量。这样可以在后台操作中使用传递的参数。

  4. e.Result = TimeConsumingOperation(bw, arg);:调用名为 TimeConsumingOperation 的方法来执行耗时的操作,并将操作的结果赋值给 DoWorkEventArgs 对象的 Result 属性。这样可以在后台操作完成后获取结果。

  5. if (bw.CancellationPending):检查 BackgroundWorker 对象的 CancellationPending 属性,判断操作是否被用户取消。

      • 如果 CancellationPendingtrue,则将 DoWorkEventArgs 对象的 Cancel 属性设置为 true,表示操作被取消。
      • 如果 CancellationPendingfalse,则继续执行后台操作。
     

仅为学习记录文章,如有冒犯请联系我!

标签:DoWorkEventArgs,sender,DoWork,BackgroundWorker,bw,arg,详解
From: https://www.cnblogs.com/kai-liang/p/17440627.html

相关文章

  • Docker php安装扩展步骤详解
    前言此篇,主要是演示docker-php-source,docker-php-ext-install,docker-php-enable-docker-configure这四个命令到底是用来干嘛的,它们在PHP容器中都做了哪些事情。很多人很不理解在Dockerfile中安装PHP扩展的时候总是出现这几个命令,本篇就就是为你揭开这些命令的神秘面纱而准......
  • Mybatis Generator 配置详解
    因原版观感不佳,搬运至此。作者:Jimin链接:https://www.imooc.com/article/21444来源:慕课网<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEgeneratorConfiguration PUBLIC"-//mybatis.org//DTDMyBatisGeneratorConfiguration1.0//EN"&quo......
  • Meta http-equiv属性详解
    http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变量值。 引用meat标签的http-equiv属性语法格式是:<metahttp-equiv="参数"content="参数......
  • spring boot 限制初始值大小及参数中文详解
    要加“m”说明是MB,否则就是KB了.-Xms:初始值-Xmx:最大值 -Xmn:最小值java-Xms10m-Xmx80m-jarmod.jar & 时区设置 java-jar-Duser.timezone=GMT+08mod.jar& #----------------------------------------  #核心属性  #----------------------------------------   #BANN......
  • Java并发编程之ConcurrentLinkedQueue详解
    简介在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循......
  • 详解URL和URLSearchParams
    URL,称为统一资源定位器,指互联网上能找到资源定位的字符串。在一般语境中,又称网络地址或链接,当我们需要访问某个网页就需要输入对应的网址字符串,而这个网址就是URL。前端对于网址链接,提供了URL对象,可以用于创建或解析网址字符串信息;而Nodejs中也有相应模块来处理网址,同样支持URL类......
  • JavaScript函数传参原理详解——值传递还是引用传递
    讨论JavaScript的传参原理之前,我们先来看一段曾经让笔者困惑了一段时间的代码vartestA=1;vartestB={};functiontestNumber(example){example=2;}functiontestObj(example){example.test=1;}testNumber(testA);testObj(testB);console.log(testA);//......
  • 【CISCN2023】unzip 详解
    【CISCN2023】unzip详解考察点:软连接+getshell首先分析一下题目,unzip,百度一下,发现这是一个linux命令,用于解压缩zip压缩包,这里放出一个详细解释,就不赘述了。https://www.cnblogs.com/cxhfuujust/p/8193310.html进入容器,可以得到一个文件上传的页面:于是,按照惯性,我们可以先......
  • 【LeetCode双向链表】LRU详解,双向链表实战
    LRU缓存请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否则返回-1。voidput(intkey,intvalu......
  • Kubernetes 证书详解(鉴权)
    Kubernetes证书详解(鉴权)简介上一篇系统分析了Kubernetes集群中每个证书的作用和证书认证的原理。对于Kube-apiserver,Kubelet来说,它们都能提供HTTPS服务,Kube-apiserver、Kubelet对于一个请求,既要认证也要鉴权。在Kube-apiserver中,鉴权也有多种方式:NodeABACRBAC......