backgroundworker使用 实现进度条ProgressBar

本文介绍如何在.NET Framework环境下利用BackgroundWorker和ProgressBar控件实现后台任务的执行,并实时展示任务进度,解决多线程操作时UI界面响应停滞的问题。通过自定义事件处理程序和方法,实现任务执行的启动、进度更新、完成状态反馈等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 backgroundworker使用 实现进度条ProgressBar


 

///.net Framework 2.0版本以上支持此控件   

///命名空间:   
System.ComponentModel   

///此控件一般是用来实现“多线程”操作,解决了UI界面处于停止响应的状态。   

///此控件可以视图支持,也可以像编程那样来创建它   
BackgroundWorker worker = new BackgroundWorer();   

///注意几个重要的事件处理程序(Event):   

///事件处理程序   

DoWorkEventHandler(object sender , DoWorkerEventArgs e);    
      
///若要收到进度更新通知,请使用   

ProgressChangedEventHandler(object sender , ProgressChangedEventArgs e);   

///若要在操作完成时收到通知,请使用   

RunWorkerCompletedeventHandler(object sender , RunWorkerEventArgs e);   

//加两个方法(Method):   

///开始执行后台操作   
RrunWorkerAsync();    

///请求取消挂起的后台操作   
CancelAsync();    

///// 功能 backgroundworder + progressbar 控件实现进度条功能   

/// button1_Click   
private void button1_Click(object sender, EventArgs e)   
{   
Form2 F2 = new Form2();   
F2.Show();   
       //这里使用的是拖动控件形式来实现。也可以用创建形式来实现   
///添加一个事件处理程序   
this.backgroundworker1.DoWorker += new DoWorkerEventHandler(DoWorker);   
///再添加一个事件处理程序(这里是实现您的功能,我这里是向数据库里添加数据)   
this.backgroudworker1.DoWorker += DoWorkerEventHandler(InsertDataWorker);   
///添加一个显示进度条的事件   
this.backgroundworker.ProgressChanged += new ProgressEventHandler(F2.ProgressChanged); //F2.ProgressChanged 是显示进度条Method   
///后台已操作完成,关闭F2窗体   
this.backgroundworker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(F2.CloseForm); // F2.CloseForm()调用关闭F2窗体   
///开始执行后台操作   
this.backgroundworker.RunWorkerAsyuc();   
         }   
///   
private void DoWorker(object sender , DoWorkEvnetArgs e)   
{   
e.Result = (WorkTimer(this.backgroundworker1,e));   
}   
/////// 这里写您要实现的功能,我这里是向数据库添加数据   
private void InsertDataWork(object sender , DoWorkEventArgs e)   
{   
// do some...   
}   
/// <summary>   
        /// 设置进度条显示长度   
        /// </summary>   
        /// <param name="sender"></param>   
        /// <param name="e"></param>   
        /// PCount 是设置F2窗体里的progressbar控件里的Maximum的值   
        private int WorkTimer(object sender, DoWorkEventArgs e)   
        {   
            for (int i = 0; i < PCount; i++)   
            {   
                if (this.backgroundWorker1.CancellationPending)   
                {   
                    e.Cancel = true;   
                    return -1;   
                }   
                else 
                {   
                    this.backgroundWorker1.ReportProgress(i);   
                }   
                ///   将当前线程挂起指定的时间   
                System.Threading.Thread.Sleep(100);   
            }   
            return -1;   
        }   


////Form2里代码   
public partial class Form2 : Form   
    {   
        public ProgressbarForm()   
        {   
            InitializeComponent();   
        }   
        /// <summary>   
        /// 关闭进度条显示窗体   
        /// </summary>   
        /// <param name="sender"></param>   
        /// <param name="e"></param>   
        public void CloseForm(object sender, RunWorkerCompletedEventArgs e)   
        {   
            this.Close();   
        }   
        /// <summary>   
        /// 显示进度条   
        /// </summary>   
        /// <param name="sender"></param>   
        /// <param name="e"></param>   
        public void ProgessChanged(object sender, ProgressChangedEventArgs e)   
        {   
            this.progressBar1.Style = ProgressBarStyle.Continuous;   
            this.progressBar1.Value = e.ProgressPercentage;   
        }   
    }


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值