c#中BackGroundWorker控件

 一、BackGroundWorker工作步骤

1.向窗体中拖入一个BackGroundWorker控件。

2.在某个方法或者事件中,调用BackGroundWorker的RunWorkerAsync()方法。

3.该方法为异步操作,将自动引发BackGroundWorker的DoWork事件。

 4.调用ReportProgress方法将引发ProgressChanged事件。

二、一个使用了BackGroundWorker的例子

 using System;

using System.Collections.Generic;

 using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

 using System.Windows.Forms;

using System.Threading;

using System.Data.SqlClient;

//该用例需要一个名为bgwTestDB的Sql Server数据库

//数据库中应包含tbBgwTest表。

//表中有data1、data2两列。

//数据库中还需要一个存储过程,sql语句如下:

 /*************** create procedure insertOneData @data1 nchar(10),

@data2 int as insert into tbBgwTest (data1,data2) values (@data1, @data2) ********************/

namespace winBackgroundWorkerTest {

public partial class backgroundWorkerTest : Form {

 int count = 30; public backgroundWorkerTest()

{

InitializeComponent();

} private void btnAdd_Click(object sender, EventArgs e)

 { //1.调用bgwInsertData的RunWorkerAsync方法,用来引发DoWork事件

bgwInsertData.RunWorkerAsync(count);

 }

 private void bgwInsertData_DoWork(object sender, DoWorkEventArgs e)

{

 BackgroundWorker worker = sender as BackgroundWorker;

//2.在DoWork中调用自定义函数,并将引发DoWork事件的sender传递出去

insertData(worker);

}

private void bgwInsertData_ProgressChanged(object sender, ProgressChangedEventArgs e)

 {

progressBar1.Value = e.ProgressPercentage;

}

 //自定义函数 insertData()

private void insertData(BackgroundWorker worker)

{

 SqlConnection conn = new SqlConnection(@"Data Source=./sqlexpress;Initial Catalog=bgwTestDB;Integrated Security=True");

 SqlCommand cmd = new SqlCommand("insertOneData", conn);

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("data1", SqlDbType.NChar, 10);

cmd.Parameters.Add("data2", SqlDbType.Int);

 for (int i = 0; i < count; i++)

 {

 try { conn.Open(); cmd.Parameters["data1"].Value = i + 1;

cmd.Parameters["data2"].Value = i + 1; cmd.ExecuteNonQuery();

//3.调用worker的ReportProgress函数,用来引发事件ProgressChanged worker.ReportProgress(i, worker); } catch(Exception ex) {

 MessageBox.Show(ex.Message);

 }

finally

 {

 if (conn.State == ConnectionState.Open) conn.Close(); } Thread.Sleep(50); } }

 private void bgwInsertData_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

{ if (e.Error != null)

 { MessageBox.Show(e.Error.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);

 return; }

else if (e.Cancelled)

{ MessageBox.Show("取消操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

 return; }

else

MessageBox.Show("操作成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

} } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值