进度条界面控件

using Share;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace LUserControl
{
    public partial class LProgressForm : Form
    {
        public LTranslucentForm translucentForm;
        /// <summary>
        /// 进度条进度事件,从小,到大的进度
        /// </summary>
        private Action<Action<int> , int,int> _ImplementAction;
        public int ipos = 0;
        public int Ipos
        {
            get { return this.progressBar.Value; }
        }
        public LProgressForm(Action<Action<int>, int, int> implementAction)
        {
            _ImplementAction = implementAction;
            InitializeComponent();
            this.progressBar.Maximum = 100;
        }

        public void SetProgressValue()
        {
            //this.progressBar.Value = value;
            this.Invoke(new Action(() =>
            {
                this.progressBar.Value = Convert.ToInt32(ipos);

            }));
        }

        public void SetProgressValue(int value)
        {
            if (value > progressBar.Maximum)
            {
                return;
            }
            System.Threading.Thread.Sleep(5);
            this.Invoke(new Action(() =>
            {
                this.progressBar.Value = value;
                //this.label1.Text = "Progress :" + value.ToString() + "%";
            }));
            // 这里关闭,比较好,呵呵!  
            //if (value == this.progressBar.Maximum - 1) this.Close();
        }

        private void ProgressForm_Load(object sender, EventArgs e)
        {
            Thread td = new Thread(QiDong);
            td.Start();

        }

        private void QiDong()
        {
            Thread.Sleep(1000);
            Updata();
        }

        public void Updata()
        {
            this.Invoke(new Action(() =>
            {
                timer1.Enabled = true;
            }));

            _ImplementAction?.Invoke(proValue, 0, 98);
            SetProgressValue(98);
        }

        #region 进度
        public AutoResetEvent mRecvEvent;//接收信号量


        // 代理定义,可以在Invoke时传入相应的参数  
        private delegate void funHandle(int nValue);
        private funHandle myHandle = null;
        int nValue = 0;
        /// <summary>  
        /// 线程函数中调用的函数  
        /// </summary>  
        private void ShowProgressBar()
        {
            myHandle = new funHandle(SetProgressValue);

        }
        /// <summary>  
        /// 线程函数,用于处理调用  
        /// </summary>  
        private void ThreadFun()
        {
            //MethodInvoker mi = new MethodInvoker(ShowProgressBar);
            //this.BeginInvoke(mi);
            System.Threading.Thread.Sleep(1000); // sleep to show window  
            for (; nValue < 3000; ++nValue)
            {
                System.Threading.Thread.Sleep(5);
                LogHelp.WriteLog("进度:" + nValue);
                //this.Invoke(this.myHandle, new object[] { (nValue / 30) });
                SetProgressValue(nValue / 30);
            }
            mRecvEvent.Set();


        }

        private void proValue(int nValue = -1)
        {
            if (nValue == -1)
            {
                nValue = this.progressBar.Value;
                nValue++;
            }
            SetProgressValue(nValue);
        }
        #endregion

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (progressBar.Value < progressBar.Maximum)
            {
                progressBar.Value++;
            }
            else
            {
                //ProcessHelp.StartProcess(@"abc.exe", staffCardCode);
                //Thread.Sleep(1000);
                timer1.Enabled = false;
                translucentForm.Focus();
                this.Close();
                translucentForm.Close();
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace LUserControl
{
    public partial class LTranslucentForm : Form
    {
        public delegate void FocusHandle();
        private Action<Action<int>, int, int> _ImplementAction;
        public LTranslucentForm(Action<Action<int>, int, int> implementAction)
        {
            _ImplementAction = implementAction;
            InitializeComponent();
        }

        private void LTranslucentForm_Load(object sender, EventArgs e)
        {
            Updata();
        }
        public void Updata()
        {
            LProgressForm progressForm = new LProgressForm(_ImplementAction);
            progressForm.translucentForm = this;
            progressForm.ShowDialog();
            //progressForm.Updata();

        }

        private void LTranslucentForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            
        }
    }
}

用法:

using Share;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace LUserControl.Progress
{
    /// <summary>
    /// 更新登录界面类
    /// </summary>
    public class ProgressFuction
    {
        public static string PATH = @"D:\xiangmu\xiangmu.login";
        public static string ProcessName = @"Login";
        /// <summary>
        /// 进度控件回调事件
        /// </summary>
        /// <param name="action">进度向前事件</param>
        /// <param name="min">开始最小度数</param>
        /// <param name="max">结束最大度数</param>
        public static void Progress(Action<int> action, int min, int max)
        {
            string path = PATH + @".zip";
            try
            {
                //解压,覆盖
                FileHelp.UnZipFile(path, action, min, max);

                //删除更新包
                FileHelp.DeleteFile(path);
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 检测登录界面是否更新
        /// </summary>
        public static void CheckLoginUpdate()
        {
            string path = PATH + @".zip";
            if (File.Exists(path))//判断文件是不是存在
            {
                //杀掉登录界面
                ProcessHelp.KillProcess(ProcessName);
                //启动更新界面
                LTranslucentForm progressForm = new LTranslucentForm(Progress);
                
                progressForm.ShowDialog();

                ProcessHelp.StartProcess(@"D:\xiangmu\Login.exe");
                while (true)
                {
                    //判断登录界面是否启动了,如果启动则跳出
                    if (ProcessHelp.IsProcess(ProcessName))
                    {
                        break;
                    }
                }
            }
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/lsgsanxiao/p/9020549.html