这几天学习了委托和线程的学习
今天就来说说进度条的加载
开始:
向目标窗体添加BackgroundWorker控件
BackgroundWorker用到这两个方法(DoWork负责监视执行程序,将执行程序放在这个方法里)(complete是事件结束执行)
这里我做一个小测试
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
Form a = new Form();
a.ShowDialog();
for (int i = 0; i <= 100; i++)
{
//Thread.Sleep(1);
worker.ReportProgress(i);
if (worker.CancellationPending) // 如果用户取消则跳出处理数据代码
{
e.Cancel = true;
break;
}
}
}
private void backgroundWorker1_RunWorkerCompleted_1(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
MessageBox.Show(e.Error.Message);
}
else if (e.Cancelled)
{
}
else
{
}
}
现在新建一个进度条窗体,当程序执行开始时进度条弹出
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PR
{
public partial class progessbar : Form
{
private BackgroundWorker backgroundWorker1; //ProcessForm 窗体事件(进度条窗体)
public progessbar(BackgroundWorker backgroundWorker)
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterParent;
this.backgroundWorker1 = backgroundWorker;
this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
}
void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//this.Close();//执行完之后,直接关闭页面
}
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.progressBar1.Value = e.ProgressPercentage;
}
private void button1_Click_1(object sender, EventArgs e)
{
this.backgroundWorker1.CancelAsync();
this.button1.Enabled = false;
this.Close();
}
}
}
这个窗体的代码可以不用变,只需要传入BackgroundWorker即可运行。
worker.ReportProgress(i);//这句代码可以传一个int i过来更新进度条,进度条值为0-100
结果展示:
进度条也可以用线程去创建:
提供源码学习: