博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程BackroundWorker 使用
阅读量:5145 次
发布时间:2019-06-13

本文共 3559 字,大约阅读时间需要 11 分钟。

参考文章:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication4{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        //BackgroundWorker 组件用来执行诸如数据库事务、文件下载等耗时的异步操作。        //在应用程序中添加一个BackgroundWorker实例,如果用的是VS,可以从工具上直接拖到应用程序:        BackgroundWorker backgroundWorker1 = new BackgroundWorker();                       //为了开始在后台操作,必须调用BackgroundWorker的RunWorkerAsync()方法,当调用此方时,BackgroundWorker 通过触发DoWork 事件,开始执行后台操作,DoWork 事件的代码是在另一个线程里执行的。        ////也可以利用RunWokerAsync()方法传递参数,backgroundWorker1.RunWorkerAsync(2000/*参数是可选的*/)        private void btnStart_Click(object sender, EventArgs e)        {            //为了显示后台操作的执行进度,首先要使WorkerReportsProgress 等于true,            //然后调用BackgroundWorker的ReportProgress()方法,通过它传递操作完成的进度值,            //此外,该方法触发ProgressChanged事件,在是此事件中,通过ProgressChangedEventArgs的实例,            //接收到主线程传递过来的参数。            backgroundWorker1.WorkerReportsProgress= true;            //为了使 BackgroundWorker 可以取消后台正在执行的操作,            //首先要把属性WorkerSupportsCancellation 的值设置为 true。            //接着调用CancelAsync()方法,该方法使得属性CancellationPending 为true,            //利用CancellationPending 属性,可以判断是否取消后台异步操作。            backgroundWorker1.WorkerSupportsCancellation = true;            backgroundWorker1.RunWorkerAsync(1000);            backgroundWorker1.DoWork+=new DoWorkEventHandler(backgroundWorker1_DoWork);            backgroundWorker1.ProgressChanged+=new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);            backgroundWorker1.RunWorkerCompleted+=new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);        }        private void btnCancel_Click(object sender, EventArgs e)        {            backgroundWorker1.CancelAsync();        }        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)        {            //允许长时间的操作             int input = (int)e.Argument;                        for (int i = 0; i < 11;i++ )            {                System.Threading.Thread.Sleep(input);                backgroundWorker1.ReportProgress(i * 10);                if (backgroundWorker1.CancellationPending)                {                    e.Cancel = true;                    return;                }            }            //在执行DoWork 事件时,DoWorkEventArgs 实例的Result 属性,            //返回值到用户;在RunWorkerCompleted 事件里,            //RunWorkerCompletedEventArgs 实例的Result 属性接收值            e.Result = 10;                }        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)        {            //progressBar1是ProgressBar控件            progressBar1.Value = e.ProgressPercentage;                 }       // 当后台操作完成以后,无论是completed 还是cancelled,则RunWorkerCompleted 事件被触发,        //通过此方法可以将后台操作的完成结果反馈给用户;另外,通过RunWorkerCompletedEventArgs        //实例的Cancelled 属性,以判断是否是Cancel操作使得后台操作终止;        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)        {            if (e.Cancelled)            {                MessageBox.Show("Operation cancelled");            }            else            {                MessageBox.Show("Operation completed");            }            //在此处接收backgroundWorker1_DoWork传递回来的值            int returnValue = (int)e.Result;            label1.Text = returnValue.ToString();                }               }}

 

转载于:https://www.cnblogs.com/ike_li/p/3944807.html

你可能感兴趣的文章
Android现学现用第十一天
查看>>
多路复用
查看>>
Python数据可视化之Pygal(雷达图)
查看>>
Java学习笔记--字符串和文件IO
查看>>
转 Silverlight开发历程—(画刷与着色之线性渐变画刷)
查看>>
SQL语法(3)
查看>>
在js在添版本号
查看>>
sublime3
查看>>
Exception Type: IntegrityError 数据完整性错误
查看>>
Nuget:Newtonsoft.Json
查看>>
Hdu - 1002 - A + B Problem II
查看>>
每天CookBook之Python-003
查看>>
每天CookBook之Python-004
查看>>
Android设置Gmail邮箱
查看>>
js编写时间选择框
查看>>
Java数据结构和算法(四)--链表
查看>>
JIRA
查看>>
小技巧——直接在目录中输入cmd然后就打开cmd命令窗口
查看>>
深浅拷贝(十四)
查看>>
HDU 6370(并查集)
查看>>