C#方法執行時用模式窗口來顯示進度條 .


在做項目的時候,會遇到執行某些方法系統停頓了一下,需要客戶等待,在客戶等待過程中,為了系統有更好的體驗,應該加個等待的標志。

這時候加個進度條以提示用戶系統正在執行着。下面這個例子,是通過一個模式窗口來實現進度條的顯示。

先上圖(這是一個發送郵件的方法):


下面介紹一下具體方法:

首先創建一個窗體ProcessBar,在里面加一個方法。用於進度條遞增、顯示

public partial class ProcessBar : Form
    {
        public ProcessBar()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 進度條方法
        /// </summary>
        /// <param name="nValue">進度條遞增的值</param>
        /// <returns></returns>
        public bool Increase(int nValue)
        {
            if (nValue > 0)
            {
                if (this.progressBar1.Value + nValue < progressBar1.Maximum)
                {
                    progressBar1.Value += nValue;
                    return true;
                }
                else
                {
                    progressBar1.Value = progressBar1.Maximum;//默認值為100
                    this.Close();
                    return false;
                }
            }
            return false;
        }
        /// <summary>
        /// 這個方法是用於關閉窗口(有時進度條會卡住)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            this.Close();
        }

    }

 第二步:在主窗口聲明顯示進度條窗體對象和一個委托:

 //委托
        private delegate bool IncreaseHandle(int nValue);
        //進度條窗口
        private ProcessBar myProcessBar = null;   
        //聲明委托對象
        private IncreaseHandle myIncrease = null;

        //郵件批量發送
        private void Button_SendAll_Click(object sender, EventArgs e)
        {
            //使用線程起動
            Thread thdSub = new Thread(new ThreadStart(ThreadFun));
            thdSub.Start();
        }

        private void ThreadFun()
        {
            //線程中的一個委托
            MethodInvoker mi = new MethodInvoker(ShowProcessBar);
            this.BeginInvoke(mi);//異步挨靠委托
            //延時1秒顯示窗口
            Thread.Sleep(1000);

            bool blnIncreased = false;
            object objReturn = null;
            //循環執行委托,直到返回值
            do
            {
                Thread.Sleep(50);
                objReturn = this.Invoke(this.myIncrease, new object[] { 2 });
                blnIncreased = (bool)objReturn;
            }
            while (blnIncreased);
        }

        private void ShowProcessBar()
        {
            myProcessBar = new ProcessBar();

            // 初始化進度條委托
            myIncrease = new IncreaseHandle(myProcessBar.Increase);
            myProcessBar.StartPosition = FormStartPosition.CenterScreen;
            myProcessBar.ShowDialog();
            myProcessBar = null;
        }

 到這里就基本完成了……

 


免責聲明!

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



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