winform 加载窗体时弹出另一个窗体并显示进度条的源码

来源:互联网 发布:有人转让我的淘宝店铺 编辑:程序博客网 时间:2024/05/13 18:26
//frmA: 源窗体
//------------------------------------------
//引用
using System.Threading;
?
BackgroundWorker worker;    
?
     
?
public frmA()
{
    InitializeComponent();
 
    worker =new BackgroundWorker();
    worker.DoWork +=new DoWorkEventHandler(worker_DoWork);
    worker.RunWorkerCompleted +=new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
}
 
/// <summary>
/// 异步 开始事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
privatevoid worker_DoWork(objectsender, DoWorkEventArgs e)
{
    //需要执行的代码
?
Thread.Sleep(5000); //让进程上卡5秒钟
?
}
 
 
 /// <summary>
 /// 事件: 异步执行完成后 
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 privatevoid worker_RunWorkerCompleted(objectsender, RunWorkerCompletedEventArgs e)
 {
     MessageBox.Show("执行完成。","run", MessageBoxButtons.OK, MessageBoxIcon.Information);
 }
 
//点击一个按钮后开始执行
privatevoid btnA_Click(objectsender, EventArgs e)
 {
?
//按钮要执行的代码放在 worker_DoWork  事件中执行
?
  //异步执行开始
worker.RunWorkerAsync();
?
            //显示进度窗体
            frmB frm =new frmB(this.worker);
            frm.StartPosition = FormStartPosition.CenterScreen;
            frm.ShowDialog(this);
        }
  
frmB: 
//里面放了一个loading.gif图片显示进度
------------------------------------------------------------
using System;
usingSystem.ComponentModel;
usingSystem.Windows.Forms;
  
namespacetest
{
    publicpartial classfrmB: Form
    {
        publicfrmB(BackgroundWorker worker)
        {
            InitializeComponent();
            worker.ProgressChanged +=newProgressChangedEventHandler(worker_ProgressChanged);
            worker.RunWorkerCompleted +=newRunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
        }
  
        voidworker_RunWorkerCompleted(objectsender, RunWorkerCompletedEventArgs e)
        {
            this.Close();
        }
  
        voidworker_ProgressChanged(objectsender, ProgressChangedEventArgs e)
        {
            //lblStatus.Text = "";
        }
  
        //工作完成后执行的事件  
        publicvoid OnProcessCompleted(objectsender, EventArgs e)  
        {
            this.Close();  
        
   
    }

  二:在弹出的窗体里显示backgroundWorker的进度

?
1, backgroundWorker1的WorkerReportsProgress属性设置为true
2, 写如下事件              
privatevoid backgroundWorker1_ProgressChanged(objectsender, ProgressChangedEventArgs e)
        {
             progressBar.Value = e.ProgressPercentage;   
     }  
  
progressBar是进度条是你定义的变量..可以写在后台执行里面控制
3 .在后台执行里面
 backgroundWorker1.ReportProgress(50);
其中50就是进度调的百分比.
比如一个循环循环100次
没次backgroundWorker1.ReportProgress(循环次数);
那么效果出来 。。 哈哈
0 0
原创粉丝点击