返回顶部
首页 > 资讯 > 精选 >C#中Backgroundworker与Thread的区别是什么
  • 222
分享到

C#中Backgroundworker与Thread的区别是什么

2023-07-02 09:07:22 222人浏览 薄情痞子
摘要

本篇内容介绍了“C#中Backgroundworker与Thread的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.Backg

本篇内容介绍了“C#中Backgroundworker与Thread的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.Backgroundworker

BackgroundWorker是微软的在.net Framwork中添加的一个组件,主要对线程的访问提供了一种安全的方式。简单的说就是对Thread的一次封装。

首先介绍一下BackgroundWorker的相关属性和方法:

属性:

  • WorkerReportsProgress:是否可以报告进度。

  • WorkerSupportsCancellation:是否允许异步中止。

  • IsBusy:是否在运行。

  • CancellationPending:判断BackgroundWorker是否已经异步取消。

方法:

  • RunWorkerAsync:开始执行任务。触发DoWork事件

  • ReportProgress:异步提醒,触发ProgressChanged事件,但是这个如果可以使用,必须设置WorkerReportsProgress为True

  • CancelAsync:取消BackgroundWorker操作。

事件:

  • DoWork:执行RunWorkerAsync后触发,异步执行的认为。

  • ProgressChanged:执行ReportProgress时触发,异步获得进度。

  • RunWorkerCompleted:线程结束时触发,主要有成功结束,发生异常或者取消时发生。

一个简单的例子:

public partial class MainWindow : Window    {         private BackgroundWorker m_BackgroundWorker;// 申明后台对象         public MainWindow()        {            InitializeComponent();             m_BackgroundWorker = new BackgroundWorker(); // 实例化后台对象             m_BackgroundWorker.WorkerReportsProgress = true; // 设置可以通告进度            m_BackgroundWorker.WorkerSupportsCancellation = true; // 设置可以取消             m_BackgroundWorker.DoWork += new DoWorkEventHandler(DoWork);            m_BackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(UpdateProgress);            m_BackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompletedWork);             m_BackgroundWorker.RunWorkerAsync(this);        }          void DoWork(object sender, DoWorkEventArgs e)        {            BackgroundWorker bw = sender as BackgroundWorker;            MainWindow win = e.Argument as MainWindow;             int i = 0;            while ( i <= 100 )            {                if (bw.CancellationPending)                {                    e.Cancel = true;                    break;                }                 bw.ReportProgress(i++);                     Thread.Sleep(1000);             }        }         void UpdateProgress(object sender, ProgressChangedEventArgs e)        {            int progress = e.ProgressPercentage;             label1.Content = string.FORMat("{0}",progress);        }          void CompletedWork(object sender, RunWorkerCompletedEventArgs e)        {            if ( e.Error != null)            {                MessageBox.Show("Error");            }            else if (e.Cancelled)            {                MessageBox.Show("Canceled");            }            else            {                MessageBox.Show("Completed");            }        }          private void button1_Click(object sender, RoutedEventArgs e)        {            m_BackgroundWorker.CancelAsync();        }    }

2.Thread

BackgroundWorker就是一个高级控件,方便使用Thread,后者是前者的灵魂或基础
直接使用后者难度稍大,但换来的是灵活方便。

Thread的使用就比较麻烦了,对于尤其是对异步提醒来说,需要写委托,代码量是很多,但是对于BackgroundWorker来说,却没有线程暂停和继续的方法。但是对于一般的来说,这些功能也是不用的,而且在微软的文档中还提到了,Thread的Resume和Suspend已经不推荐使用。

一个简单的例子:

using System;using System.Threading; namespace ThreadsComm{    public delegate void ReadParamEventHandler(string sParam);    class MyThread    {        public Thread thread1;        private static ReadParamEventHandler OnReadParamEvent;        public MyThread()        {            thread1 = new Thread(new ThreadStart(MyRead));            thread1.IsBackground = true;            thread1.Start();        }        public event ReadParamEventHandler ReadParam        {            add { OnReadParamEvent += new ReadParamEventHandler(value);}            remove{ OnReadParamEvent -= new ReadParamEventHandler(value);}        }        protected void MyRead()        {            int i = 0;            while (true)            {                Thread.Sleep(1000);                i = i + 1;                OnReadParamEvent(i.ToString());//触发事件            }        }    }}using System;using System.windows.Forms; namespace ThreadsComm{    public partial class Form1 : Form    {        private static string param = "";        public Form1()        {            InitializeComponent();            MyThread thread1 = new MyThread();            thread1.ReadParam += this.OnRead;        }         private void OnRead(string sParam)        {            param = sParam;            Object[] list = { this,System.EventArgs.Empty};            this.lblShow.BeginInvoke(new EventHandler(LabelShow), list);        }        protected void LabelShow(Object o, EventArgs e)        {            this.lblShow.Text = param;        }    }}

“C#中Backgroundworker与Thread的区别是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: C#中Backgroundworker与Thread的区别是什么

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

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

猜你喜欢
  • C#中Backgroundworker与Thread的区别是什么
    本篇内容介绍了“C#中Backgroundworker与Thread的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.Backg...
    99+
    2023-07-02
  • C#中Backgroundworker与Thread的区别
    目录1.Backgroundworker2.Thread3.总结最近项目要用到,窗体Form程序要在后台开启几个子线程,负责和其他端进行通信,异步读写,并且来更改UI。在网上查了有B...
    99+
    2024-04-02
  • c#中task与thread区别是什么
    这篇文章主要介绍了c#中task与thread区别是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.什么是thread当我们提及多线程的时候会想到thread和thre...
    99+
    2023-06-29
  • idea中All和Thread的区别是什么
    这篇文章主要介绍“idea中All和Thread的区别是什么”,在日常操作中,相信很多人在idea中All和Thread的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”idea中All和Thread...
    99+
    2023-06-29
  • C++中const与constexpr的区别是什么
    这篇文章主要讲解了“C++中const与constexpr的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中const与constexpr的区别是什么”吧!一.const常量...
    99+
    2023-06-21
  • c#中monitor与mutex的区别是什么
    在C#中,Monitor和Mutex都是用来控制并发访问的机制,但它们有一些区别: Mutex是一个系统级别的同步对象,而Mon...
    99+
    2024-03-15
    c#
  • c#中task与thread的区别及使用讲解
    目录一.什么是thread二.什么是task三.创建一个task任务有两种模式1.使用factory创建会直接执行2.我们来看看task的生命周期3.下面演示几个控制task的方法4...
    99+
    2024-04-02
  • c与javascript的区别是什么
    这篇文章主要介绍“c与javascript的区别是什么”,在日常操作中,相信很多人在c与javascript的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c与ja...
    99+
    2024-04-02
  • C++与C语言的区别是什么
    这篇“C++与C语言的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++与C语言的区别是什么”文章吧。1. 结构...
    99+
    2023-06-29
  • C#与C++枚举的区别是什么
    本篇内容介绍了“C#与C++枚举的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C++与C#中枚举的区别一、C++枚举类型中的每个...
    99+
    2023-06-30
  • C++中strlen(),sizeof()与size()的区别是什么
    本篇内容介绍了“C++中strlen(),sizeof()与size()的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!详细介绍1...
    99+
    2023-06-30
  • C++中指针与引用的区别是什么
    这篇文章主要介绍了C++中指针与引用的区别是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++中指针与引用的区别是什么文章都会有所收获,下面我们一起来看看吧。1、指针的声明上文中提到,指针和其所指向的变量...
    99+
    2023-06-19
  • Thread Safe和None Thread Safe在php中有什么区别
    本篇文章为大家展示了Thread Safe和None Thread Safe在php中有什么区别,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Windows版的PHP从版本5.2.1开始有Threa...
    99+
    2023-06-15
  • java与c语言的区别是什么
    这篇文章将为大家详细讲解有关java与c语言的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类...
    99+
    2023-06-14
  • Java中Runnable和Thread有什么区别
    这篇文章给大家介绍Java中Runnable和Thread有什么区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Threa...
    99+
    2023-06-17
  • Android中Handler、Thread、HandlerThread有什么区别
    在Android中,Handler、Thread和HandlerThread是用于处理异步任务的三个重要类。它们之间的区别如下:1....
    99+
    2023-08-09
    Android
  • C++中thread和pthread的区别有哪些
    C++中的thread是C++11标准引入的线程库,而pthread是POSIX标准中定义的线程库。它们之间的主要区别如下:1. 语...
    99+
    2023-10-20
    C++
  • php中==与===的区别是什么
    这篇文章主要讲解了“php中==与===的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中==与===的区别是什么”吧!一、“==”操作符“==”操作符是PHP中的等于操作符...
    99+
    2023-07-05
  • C++和C中const的区别是什么
    本篇内容介绍了“C++和C中const的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!const,这个词字面意思为:常数。这就表示...
    99+
    2023-06-21
  • c#中task与thread区别及其使用的方法示例
    目录1.什么是thread2.什么是task3.创建一个task任务有两种模式:1.什么是thread 当我们提及多线程的时候会想到thread和threadpool,这都是异步操作...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作