BackgroundWorker使用介绍

c#

BackgroundWorker使用介绍

用途:在单独的线程上执行任务,即在一个线程中执行一个fuction或者代码

使用

//创建BackgroundWorker对象
BackgroundWorker backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerSupportsCancellation = true; //是否支持运行时取消操作
backgroundWorker.WorkerReportsProgress = true; //是否支持 报告执行进度

//注册事件
backgroundWorker.DoWork += backgroundWorker_DoWork; //开始执行任务事件,任务运行在线程中,不可在此线程中直接更新UI线程(如设置TextBox1.Text="123")
backgroundWorker.ProgressChanged += BackgroundWorker_ProgressChanged; //报告执行进度事件,运行在UI线程,可直接更新UI,如设置TextBox1.Text="123",ProcessBar1.Value = value
backgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;//任务执行完成事件,运行在UI线程,可直接更新UI,如设置TextBox1.Text="123", ProcessBar1.Value=100

//触发任务
private void btnRun_Click(object sender, EventArgs e)
{
	string input_param = "file path";
	// 向后台任务传参
	if (backgroundWorker.IsBusy != true)
	{
		backgroundWorker.RunWorkerAsync(input_param);
	}
}

//取消任务
private void btnRun_Click(object sender, EventArgs e)
{
	if (backgroundWorker.WorkerSupportsCancellation == true)
    {
         backgroundWorker.CancelAsync();
    }
}

// 后台执行的任务
private void backgroundWorker_DoWork(object? sender, DoWorkEventArgs e)
{
    //后台任务接收传入的参数
    string input_param = e.Argument.ToString();
    
    //后台执行任务代码
    BackgroundWorker worker = sender as BackgroundWorker;
    for (int i = 1; i <= 10; i++)
    {
       if (worker.CancellationPending == true)
       {
           e.Cancel = true;
           break;
       }
       else
       {
          // Perform a time consuming operation and report progress.
          system.Threading.Thread.Sleep(500);
          worker.ReportProgress(i * 10); //报告执行进度,触发ProgressChanged事件
        }
    }   
}
//更新UI介面任务执行进度
//运行在UI线程
private void BackgroundWorker_ProgressChanged(object? sender, ProgressChangedEventArgs e)
{
    //获取执行进度 int型 e.ProgressPercentage
	this.progressBar1.Value = e.ProgressPercentage;
}

//后台任务执行完成事件处理程序
//运行UI线程
private void BackgroundWorker_RunWorkerCompleted(object? sender, RunWorkerCompletedEventArgs e)
{
	this.progressBar1.Value = 100;          
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值