• winform BackgroundWorker组件操作


     

      1 using System;
      2 using System.Collections.Generic;
      3 using System.ComponentModel;
      4 using System.Data;
      5 using System.Drawing;
      6 using System.Linq;
      7 using System.Text;
      8 using System.Threading;
      9 using System.Windows.Forms;
     10 
     11 namespace BackgroundWorkTest
     12 {
     13     public partial class Form1 : Form
     14     {
     15         public Form1()
     16         {
     17             InitializeComponent();
     18         }
     19 
     20         /// <summary>
     21         /// 开始运行按钮
     22         /// </summary>
     23         /// <param name="sender"></param>
     24         /// <param name="e"></param>
     25         private void btnStart_Click(object sender, EventArgs e)
     26         {
     27             if (backgroundWorker1.IsBusy)
     28             {
     29                 MessageBox.Show("正在运行线程");
     30                 return;
     31             }
     32 
     33             backgroundWorker1.RunWorkerAsync(1000);
     34         }
     35 
     36         /// <summary>
     37         /// 后台组件工作中运行的代码
     38         /// </summary>
     39         /// <param name="sender"></param>
     40         /// <param name="e">e.Argument传递的数值</param>
     41         private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
     42         {
     43             int n = 0;
     44             int sum = 0;
     45             //获取异步操作的数值
     46             if (e.Argument != null)
     47             {
     48                 n = (int)e.Argument;
     49             }
     50 
     51             for (int i = 0; i < n; i++)
     52             {
     53                 //是否取消后台操作
     54                 if (backgroundWorker1.CancellationPending)
     55                 {
     56                     e.Cancel = true;
     57                     return;
     58                 }
     59                 sum += i;
     60                 Thread.Sleep(10);
     61                 //通过计算,传递值为100.比如i=1000,i / 10 = 100;
     62                 backgroundWorker1.ReportProgress(i / 10, "当前i的值为" + Convert.ToString(i));
     63             }
     64             //异步操作结果的值
     65             e.Result = sum;
     66         }
     67 
     68         private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
     69         {
     70             //注意value数值不能大于100
     71             progressBar1.Value = e.ProgressPercentage;
     72             label1.Text = e.UserState.ToString();
     73         }
     74 
     75         private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
     76         {
     77             //异步操作期间是否出错
     78             if (!(e.Error == null))
     79             {
     80                 MessageBox.Show(e.Error.Message);
     81                 return;
     82             }
     83 
     84             //异步操作期间是否取消
     85             if (e.Cancelled)
     86             {
     87                 progressBar1.Value = 0;
     88                 label1.Text = "";
     89                 MessageBox.Show("取消线程的执行");
     90                 return;
     91             }
     92 
     93             label1.Text = "计算结果:" + e.Result.ToString();
     94          //   this.progressBar1.Value = 100;
     95         }
     96 
     97         /// <summary>
     98         /// 取消按钮
     99         /// </summary>
    100         /// <param name="sender"></param>
    101         /// <param name="e"></param>
    102         private void btnCancel_Click(object sender, EventArgs e)
    103         {
    104             if (!backgroundWorker1.IsBusy) return;
    105 
    106             //取消后台操作
    107             backgroundWorker1.CancelAsync();
    108            
    109         }
    110     }
    111 }

    本文来自博客园,作者:云辰,转载请注明原文链接:https://www.cnblogs.com/yunchen/p/15038288.html

  • 相关阅读:
    【Vue】状态管理
    【Vue】路由
    【Vue】组件
    【Vue】基础(数据 & 计算属性 & 方法)
    【Vue】基础(虚拟DOM & 响应式原理)
    【Vue】基础(生命周期 & 常用指令)
    【Vue】搭建开发环境
    【Mongodb】事务
    【Mongodb】视图 && 索引
    【Mongodb】聚合查询 && 固定集合
  • 原文地址:https://www.cnblogs.com/yunchen/p/15038288.html
Copyright © 2020-2023  润新知