`

一个进度条的实现

    博客分类:
  • C#
阅读更多

新建一个类MyProcessBar

internal class MyProcessBar
    {
        private frmProcessBar myProcessBar = null;//进度条窗体事件
        private delegate bool IncreaseHandle(int nValue);//声明一个委托
        private IncreaseHandle myIncrease = null;//定义一个委托变量
        public MyProcessBar()
        {

        }
        /// <summary>
        /// 打开进度条窗体
        /// </summary>
        private void ShowProcessBar()
        {
            myProcessBar = new frmProcessBar();
            // 绑定事件
            myIncrease = new IncreaseHandle(myProcessBar.Increase);
            myProcessBar.ShowDialog();
            myProcessBar = null;
        }
        /// <summary>
        /// 线程功能
        /// </summary>
        private void ThreadFun(object o)
        {
            Form fm = (Form)o;
            //声明一个委托,ShowProcessBar为改委托所托管的代码,必须为void
            MethodInvoker mi = new MethodInvoker(ShowProcessBar);
            //异步调用ShowProcessBar(不用等ShowProcessBar方法执行完,程序可以往下执行)
            fm.BeginInvoke(mi);
            Thread.Sleep(1000);//线程停止一秒,让进度条窗体显示
            bool blnIncreased = false;
            object objReturn = null;
            do
            {
                Thread.Sleep(50);
                //同步调用myProcessBar.Increase(),程序要等该方法执行完,才能往下执行
                objReturn = fm.Invoke(this.myIncrease,
              new object[] { 2 });
                blnIncreased = (bool)objReturn;
            }
            while (blnIncreased);
        }

        /// <summary>
        /// 线程启动
        /// </summary>
        /// <param name="o"></param>
        public void Start(object o)
        {
            Thread thdSub = new Thread(ThreadFun);
            thdSub.IsBackground = true;
            thdSub.Start(o);
        }
    }

 

新建一个窗体frmProcessBar(进度条窗体)添加ProcessBar控件

 

 

 public partial class frmProcessBar : Form
    {
        public frmProcessBar()
        {
            InitializeComponent();
        }
        private void frmProcessBar_Load(object sender, EventArgs e)
        {

        }
        /// <summary>
        /// Increase process bar
        /// </summary>
        /// <param name="nValue">the value increased</param>
        /// <returns></returns>
        public bool Increase(int nValue)
        {
            if (nValue > 0)
            {
                if (prcBar.Value + nValue < prcBar.Maximum)
                {
                    prcBar.Value += nValue;
                    return true;
                }
                else
                {
                    prcBar.Value = prcBar.Maximum;
                    this.Close();
                    return false;
                }
            }
            return false;
        }
    }

 

主体窗

        private void btnStart_Click(object sender, EventArgs e)
        { 
            MyProcessBar pb = new MyProcessBar();
            pb.Start(this);
        }

 

 

 

 

  • 大小: 6.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics