文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-07-02 09:21

关注

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

1.Backgroundworker

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

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

属性:

方法:

事件:

一个简单的例子:

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的区别是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯