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