C# BackgroundWorker组件学习入门介绍_C#教程-查字典教程网
C# BackgroundWorker组件学习入门介绍
C# BackgroundWorker组件学习入门介绍
发布时间:2016-12-28 来源:查字典编辑
摘要:一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一...

一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能.

BackgroundWorker类允许您在单独的专用线程上运行操作。 耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。

如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker类方便地解决问题(MSDN)。

若要在后台执行耗时的操作,请创建一个 BackgroundWorker,侦听那些报告操作进度并在操作完成时发出信号的事件。 可以通过编程方式创建 BackgroundWorker,

也可以将它从“工具箱”的“组件”选项卡中拖到窗体上。 如果在 Windows 窗体设计器中创建 BackgroundWorker,则它会出现在组件栏中,而且它的属性会显示在“属性”窗口中(MSDN)。

属性:

IsBusy:获取一个值,指示 BackgroundWorker 是否正在运行异步操作。

WorkerReportsProgress:获取或设置一个值,该值指示 BackgroundWorker 能否报告进度更新。

WorkerSupportsCancellation:获取或设置一个值,该值指示 BackgroundWorker 是否支持异步取消。

事件:

DoWork:调用 RunWorkerAsync 时发生。

ProgressChanged:调用 ReportProgress 时发生。

RunWorkerCompleted:当后台操作已完成、被取消或引发异常时发生。

实例:

窗体设计如下图:

代码实现:

复制代码 代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace WindowsFormsApplication2

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

backgroundWorker1.WorkerReportsProgress = true;

backgroundWorker1.WorkerSupportsCancellation = true;

}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)

{

BackgroundWorker worker = sender as BackgroundWorker;

for (int i = 1; i <= 12; i++)

{

if (worker.CancellationPending == true)

{

e.Cancel = true;

break;

}

else

{

System.Threading.Thread.Sleep(500);

worker.ReportProgress(i * 10);

}

}

}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)

{

lbResult.Text = (e.ProgressPercentage.ToString() + "%"+e.UserState);

}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

{

if (e.Cancelled == true)

{

lbResult.Text = "Canceled!";

}

else if (e.Error != null)

{

lbResult.Text = "Error: " + e.Error.Message;

}

else

{

lbResult.Text = "Done!";

}

}

private void btnStartAsync_Click(object sender, EventArgs e)

{

if (backgroundWorker1.IsBusy != true)

{

backgroundWorker1.RunWorkerAsync();

}

}

private void btnCancelAsync_Click(object sender, EventArgs e)

{

if (backgroundWorker1.WorkerSupportsCancellation == true)

{

backgroundWorker1.CancelAsync();

}

}

}

}

运行结果:

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C#教程学习
    热门C#教程学习
    编程开发子分类