BackgroundWorker的测试

  1.写一个后台处理的类
    /// <summary>
    /// 后台处理方法类
    /// </summary>
    public class BizBackHandle
    {
        #region private member
        private static BizBackHandle _current;
        //后台处理的对象
        private BackgroundWorker _backgroundWorker;
        //后台处理后的结果
        private string temp;      
        //页面对象的引用
        private Label _lb;      
        #endregion

        #region public property
        public static BizBackHandle Current
        {
            get
            {
                if (_current == null)
                {
                    _current = new BizBackHandle();
                }
                return _current;
            }
        }        
        /// <summary>
        /// 页面对象的引用
        /// </summary>
        public Label Lb
        {
            get { return _lb; }
            set { _lb = value; }
        }
        #endregion

        #region public methods
        public BizBackHandle()
        {
            //初始化后台对象
            _backgroundWorker = new BackgroundWorker();
            _backgroundWorker.WorkerSupportsCancellation = true;
            _backgroundWorker.WorkerReportsProgress = true;
            _backgroundWorker.DoWork += new DoWorkEventHandler(_backgroundWorker_DoWork);
            _backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_backgroundWorker_RunWorkerCompleted);
        }
        /// <summary>
        /// 启动后台处理
        /// </summary>    
        public void DoBackGroundWork()
        {
            _backgroundWorker.RunWorkerAsync();
        }        
        #endregion

        #region events
        /// <summary>
        /// 后台完成事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void _backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show("报告:后台处理完了,可以看后台的处理结果了");
            if (Lb != null)
            {
                Lb.Text = temp;
            }
        }
        /// <summary>
        /// 后台处理事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            MessageBox.Show("报告:后台开始工作了");
            temp = "这是在后台处理的结果 /r/n Start time:" + DateTime.Now.ToLocalTime() + "/r/n";
            Thread.Sleep(10000);
            temp += "  End time:" + DateTime.Now.ToLocalTime() + "/r/n";
        }
        #endregion
    }
2.在页面上画两个label 和 一个 button
   调用的方法是:
        private void button1_Click(object sender, EventArgs e)
        {
            BizBackHandle.Current.Lb = label1;
            BizBackHandle.Current.DoBackGroundWork();           
            label1.Text = "这是前台显示的值,后台处理已经开始了";
            label2.Text = "但是这不影响前台的处理,后台处理完会自动显示结果";
           
        }              

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BackgroundWorker是一个用于执行异步操作的类。当调用BackgroundWorker.RunWorkerAsync()方法时,会触发DoWork事件,该事件用于执行耗时的操作。需要注意的是,DoWork事件内部的代码运行在非UI线程上,所以应避免在该事件内部与用户界面进行交互。与用户界面交互的操作应放置在ProgressChanged和RunWorkerCompleted事件中。\[1\]\[2\] 另外,BackgroundWorker还提供了ReportProgress方法,用于在执行异步操作的过程中报告进度。当调用BackgroundWorker.ReportProgress(int percentProgress)方法时,会触发ProgressChanged事件。该事件的ProgressChangedEventArgs.ProgressPercentage属性可以接收来自ReportProgress方法传递的percentProgress参数值,而ProgressChangedEventArgs.UserState属性可以接收来自ReportProgress方法传递的userState参数。\[3\] 总之,BackgroundWorker是一个方便的工具,可以帮助我们在后台执行耗时的操作,同时保持用户界面的响应性。 #### 引用[.reference_title] - *1* *3* [BackgroundWorker使用总结](https://blog.csdn.net/CodeRookieGuo/article/details/72723310)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [C#多线程之BackgroundWorker](https://blog.csdn.net/sinat_31608641/article/details/106116204)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值