zoukankan      html  css  js  c++  java
  • Winfrom BackgroundWorker

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Reflection;
    using System.Threading;
    using System.Windows.Forms;
    
    namespace BackgroundWorkerExplore
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            #region 异步处理
            //002
            private int RetrieveData(BackgroundWorker worker, DoWorkEventArgs e)
            {
                int max = (int)e.Argument;
                int percent = 0;
                for (int i = 1; i <= max; i++)
                {
                    if (worker.CancellationPending) return i;
    
                    percent = (int)(((double)i / (double)max) * 100);
                    // 摘要:
                    //     引发 System.ComponentModel.BackgroundWorker.ProgressChanged 事件。
                    //   percentProgress:     已完成的后台操作所占的百分比,范围从 0% 到 100%。
                    //   userState:/     传递到 System.ComponentModel.BackgroundWorker.RunWorkerAsync(System.Object) 的状态对象。
                    worker.ReportProgress(percent, new KeyValuePair<int, string>(i, Guid.NewGuid().ToString()));
                    Thread.Sleep(500);
                }
    
                return max;
            }
            //001 首先执行dowork
            private void bgworker_DoWork(object sender, DoWorkEventArgs e)
            {
                try
                {
                    e.Result = RetrieveData(this.bgworker, e);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    throw;
                }
            }
    
            //003
            private void bgworker_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                KeyValuePair<int, string> record = (KeyValuePair<int, string>)e.UserState;
                //操作UI
                this.labelResultLeft.Text = string.Format("There are {0} records retrieved!", record.Key);
                this.progressBarLeft.Value = e.ProgressPercentage;
                this.lvLeft.Items.Add(record.Value);
            }
    
            //004所有操作执行完后执行
            private void bgworker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                try
                {
                    this.labelResultLeft.Text = string.Format("Total records: {0}", e.Result);
                    this.btnStart.Enabled = true;
                    this.btnStop.Enabled = false;
                }
                catch (TargetInvocationException ex)
                {
                    MessageBox.Show(ex.InnerException.GetType().ToString());
                }
            }
            #endregion
    
            private void btnStart_Click(object sender, EventArgs e)
            {
                if (this.bgworker.IsBusy) return;
    
                this.lvLeft.Items.Clear();
                int MaxValue = 10;
                this.bgworker.RunWorkerAsync(MaxValue);
                this.btnStart.Enabled = false;
                this.btnStop.Enabled = true;
            }
    
            private void btnStop_Click(object sender, EventArgs e)
            {
                this.bgworker.CancelAsync();
            }
        }
    }
    

    运行效果:

  • 相关阅读:
    小作业(# 求1-2+3-4+5 ... 99的所有数的和)
    小作业(3、输出 1-100 内的所有奇数 4、输出 1-100 内的所有偶数)
    小作业(求1-100的所有数的和)
    作业小练习(使用while循环输入 1 2 3 4 5 6 8 9 10)
    keepalived介绍
    nginx日志文件配置
    Nginx配置文件编写实例
    Nginx部署流程
    nginx服务介绍
    http协议原理介绍
  • 原文地址:https://www.cnblogs.com/YYkun/p/10785473.html
Copyright © 2011-2022 走看看