本文主要是介绍C# BackgroundWorker控件使用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在C# Winform开发中,若遇到大量数据操作或运算,通常UI界面卡死造成交互不良。
解决方法:1.使用BackgroundWorker控件;
2.使用多线程委托回调。
本章先介绍该控件使用方法。
界面展示:
若没使用该控件,点击开始,进度条会滚动但会造成界面卡死,体验不良。
步骤一:实例化BackgroundWorker。
private BackgroundWorker bgWorker = new BackgroundWorker();//实例化控件
步骤二:窗体加载时设置属性。
private void Form1_Load(object sender, EventArgs e)
{
//是否报告处理进度
bgWorker.WorkerReportsProgress = true;
//是否允许取消操作
bgWorker.WorkerSupportsCancellation = true;
//执行三个事件,DoWork事件,ProgressChanged事件以及RunWorkedCompleted事件
bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
bgWorker.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgessChanged);
bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_WorkerCompleted);
}
步骤三:DoWork事件,运算操作,注意不能有与控件的交互操作,跨线程调用控件(例如给控件赋值)。
public void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
//设置进度条Maximum为1000,循环1000次
for (int i = 0; i <= 1000; i++)
{
//获取是否取消操作
if (bgWorker.CancellationPending)
{
e.Cancel = true;
return;
}
else
{
//报告进度
bgWorker.ReportProgress(i, "Working");
System.Threading.Thread.Sleep(10);
}
}
}
步骤四:ProgressChanged事件,可与控件进行交互,为进度条赋值。
public void bgWorker_ProgessChanged(object sender, ProgressChangedEventArgs e)
{
//e.ProgressPercentage是获取任务进度百分比,int类型
progressBar1.Value = e.ProgressPercentage;
label1.Text = "处理进度:" + Convert.ToString(e.ProgressPercentage) + "%";
}
步骤五:RunWorkerCompleted事件,当DoWork事件结束时或取消时执行。
public void bgWorker_WorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//若没有完全执行结束,则报错
if (e.Error != null)
{
MessageBox.Show(e.Error.ToString());
return;
}
if (!e.Cancelled)
this.label1.Text = "处理完毕!";
else
this.label1.Text = "处理终止!";
}
开始与结束事件:
//开始
private void btnStart_Click(object sender, EventArgs e)
{
//正忙时不允许继续操作
if (bgWorker.IsBusy)
return;
//异步开启
bgWorker.RunWorkerAsync("hello");
}//停止
private void btnStop_Click(object sender, EventArgs e)
{
bgWorker.CancelAsync();
}
点击开始时,进度条开始滚动,user此时可以拖动窗口或者key相关数据,UI界面不会卡死,体验良好。
这篇关于C# BackgroundWorker控件使用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!