C# BackgroundWorker组件学习
来源:互联网 发布:福建省文化厅网络审批 编辑:程序博客网 时间:2024/05/29 15:12
http://www.cnblogs.com/GaoHuhu/p/3359340.html
一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用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# BackgroundWorker组件学习
- C# BackgroundWorker组件
- BackgroundWorker 组件
- BackgroundWorker组件
- c# BackgroundWorker
- c# BackgroundWorker组件介绍(属性、方法、事件)
- c# BackgroundWorker组件介绍(属性、方法、事件)
- BackgroundWorker组件使用经验
- BackgroundWorker组件概述
- (C#)多线程-BackgroundWorker组件
- (C#)多线程-BackgroundWorker组件
- BackgroundWorker组件的使用
- 使用BackgroundWorker组件
- 使用BackgroundWorker组件
- 使用BackgroundWorker组件
- BackgroundWorker组件的使用
- 说说BackgroundWorker组件
- BackGroundWorker组件详解
- SQL触发器
- 使用 shell 脚本对 Linux 系统和进程资源进行监控
- Android使用CountDownTimer实现倒计时功能
- PreferenceActivity 参数设置UI的使用
- storm作者个人博客网址
- C# BackgroundWorker组件学习
- MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
- 需要迈向真正的Coder
- asp.net 动态产生checkbox
- android提权漏洞CVE-2010-EASY修复
- maven中tomcat7-maven-plugin插件的使用
- MyBatis学习 之 二、SQL语句映射文件 resultMap
- js框架开发之旅--原型和类
- Representation Videos using Mid-level discriminative patches + CVPR13