winform 加載窗體時彈出另一個窗體並顯示進度條的源碼


//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>
        private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            //需要執行的代碼
              Thread.Sleep(5000);  //讓進程上卡5秒鍾
        }


        /// <summary>
        /// 事件: 異步執行完成后 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show("執行完成。", "run", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

       //點擊一個按鈕后開始執行
       private void btnA_Click(object sender, EventArgs e)
        {
              //按鈕要執行的代碼放在 worker_DoWork  事件中執行
              //異步執行開始
            worker.RunWorkerAsync();
            //顯示進度窗體
            frmB frm = new frmB(this.worker);
            frm.StartPosition = FormStartPosition.CenterScreen;
            frm.ShowDialog(this);
        }

frmB: 
//里面放了一個loading.gif圖片顯示進度
------------------------------------------------------------
using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace test
{
    public partial class frmB: Form
    {
        public frmB(BackgroundWorker worker)
        {
            InitializeComponent();
            worker.ProgressChanged +=new ProgressChangedEventHandler(worker_ProgressChanged);
            worker.RunWorkerCompleted +=new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
        }

        void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.Close();
        }

        void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            //lblStatus.Text = "";
        }

        //工作完成后執行的事件  
        public void OnProcessCompleted(object sender, EventArgs e)  
        {
            this.Close();  
        } 
 
    }

  二:在彈出的窗體里顯示backgroundWorker的進度

1, backgroundWorker1的WorkerReportsProgress屬性設置為true
2, 寫如下事件              
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
             progressBar.Value = e.ProgressPercentage;   
     }  

progressBar是進度條是你定義的變量..可以寫在后台執行里面控制
3 .在后台執行里面
 backgroundWorker1.ReportProgress(50);
其中50就是進度調的百分比.
比如一個循環循環100次
沒次backgroundWorker1.ReportProgress(循環次數);
那么效果出來 。。 哈哈

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM