ProgressBar(进度条)

ProgressBar四个重要属性:
1. Value 当前进度条加载
该属性含义为:设置进度条的进度值
有两张方式进行设置:
一、progressBar.Value = 1000;
二、progressBar.increment(1000);

2. Step 进度条递增
该属性含义为:控制增长的幅度。
引用Step属性的一个重要方法是ProgressBar.PerformStep(),
主要用于递增该值Step属性,来控制Value属性递增情况。

3. Minimum 进度条最小值
4. Maximum 进度条最大值

ProgressBar(进度条)_第1张图片

下面分享个人对于同一个程序,不同的编写代码。

第一个代码程序利用Timer时间控制器对进度条的暂停,继续,终止,开始等功能的控制。

public void Rz(string str)//日志程序
        {
            textBox2.AppendText(DateTime.Now +" --> "+ str + Environment.NewLine);
            //Environment.NewLine起到换行作用,利用这句程序可以在任何平台环境下运行(如WIN,xp)。
            //也可以使用“\r\n”不过对于环境和平台需求不足。
            //文本框中当前文本追加文本,
        }
        private void button1_Click(object sender, EventArgs e)//设定时间
        {
            progressBar1.Value = progressBar1.Maximum;
            button2.Enabled = true;
            Rz("加载进度条完成");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            button2.Enabled = false;
            button3.Enabled = false;
            button4.Enabled = false;
        }

        #region 开始和运算进度条过程
        private void button2_Click(object sender, EventArgs e)//开始按键
        {
            button2.Enabled = false;
            button1.Enabled = false;
            button3.Enabled = true;
            button4.Enabled = true;
            progressBar1.Step = -1;
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (progressBar1.Value > progressBar1.Minimum)
            {
                progressBar1.PerformStep();
                timer1.Interval = Convert.ToInt32(textBox1.Text);
                double i = ((Convert.ToDouble(progressBar1.Value) - Convert.ToDouble(progressBar1.Maximum)) / Convert.ToDouble(progressBar1.Maximum)) * 100;
                Rz("当前进度" + i + "%");
            }
        } 
        #endregion

        private void button3_Click(object sender, EventArgs e)//暂停按键
        {
            if (timer1.Enabled == true)
            {
                button3.Text = "继续";
                timer1.Stop();
                timer1.Enabled = false;
                Rz("进度条已暂停");
            }
            else
            {
                button3.Text = "暂停";
                timer1.Start();
                timer1.Enabled = true;
                Rz("进度条已继续");
            }
        }

        private void button4_Click(object sender, EventArgs e)//停止按键
        {
            button2.Enabled = false;
            button3.Enabled = false;
            button4.Enabled = false;
            button1.Enabled = true;
            textBox1.Text = "";
            progressBar1.Value = progressBar1.Minimum;
            Rz("进度条已停止");
        }

ProgressBar(进度条)_第2张图片

第二个代码程序则使用多线程中的invoke同步来执行对进度条的操作。
1、进度条的加载时间,随进度条的Maximum的变化而变化。(其中UI界面输入以分钟为单位)
2、Thread中对进度条的开始,暂停,结束起到控制作用。
3、主要利用Value属性的递增递减来控制进度条的加载

public delegate void dele();  //声明委托
    public partial class Form1 : Form
    {
        public dele de; //声明委托变量
        Thread th; //声明一个线程
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Kaishi.Enabled = false;
            ZanTin.Enabled = false;
            TinZhi.Enabled = false;
            JiXu.Enabled = false;
            toolStripStatusLabel3.Text = DateTime.Now.ToString();
        }

        public void JinDu(string str)//日志文件程序
        {
            textBox2.AppendText(DateTime.Now + str + Environment.NewLine);
            //Environment.NewLine起到换行作用,利用这句程序可以在任何平台环境下运行(如WIN,xp)。
            //也可以使用“\r\n”不过对于环境和平台需求不足。
            //文本框中当前文本追加文本,
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            toolStripStatusLabel3.Text = DateTime.Now.ToString();
        }

        private void SheDinShiJian_Click(object sender, EventArgs e)//设置进度运行时间
        {
            try
            {
                timer1.Interval = Convert.ToInt32(textBox1.Text) * 60000; 
                // 计算多少分钟 ,1000毫秒等于1秒,1分钟等于60000毫秒,输入分钟
                progressBar1.Value = progressBar1.Maximum; // 进度条初始化
                //进度条多大,则加载就多大
                DateTime dt = DateTime.Now;
                JinDu("设置时间成功,请按开始键继续!");
                Kaishi.Enabled = true;
                ZanTin.Enabled = true;
                TinZhi.Enabled = true;
                JiXu.Enabled = true;
                SheDinShiJian.Enabled = false;
                textBox1.Enabled = false;
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message);
            }
        }

        #region 开始按钮
        public void NewKaiShi()//进度条执行程序
        {
            //程序开始运行
            //每停顿多少秒 = 时间控制器总多少秒/进度条最大值(进度条最大值不断变化,所得出的停顿秒数也不同)
            //timer.interval表示每多少秒停顿。
            int JL = timer1.Interval / progressBar1.Maximum;
            for (int i = 0; i <= progressBar1.Maximum; i++)
            {
                this.Invoke((dele)(() =>
                {
                    //线程同步
                    JinDu("加载" + i + "%");//更改TextBox2的内容
                    if (i < 100)
                        progressBar1.Value -= 1;
                }));
                Thread.Sleep(JL);
                //睡眠JL秒
            }
        }
        private void Kaishi_Click(object sender, EventArgs e)//开始按钮
        {
            de = new dele(NewKaiShi);//实例化委托
            th = new Thread(new ThreadStart(delegate
            {
                de();//子线程委托
            }));
            JiXu.Enabled = false;
            Kaishi.Enabled = false;
            th.IsBackground = true;
            th.Start();
        } 
        #endregion

        private void JiXu_Click(object sender, EventArgs e)//继续按钮
        {
            if (th.ThreadState != ThreadState.Suspended)
            {
                th.Resume();//线程回复/继续加载进度条
            }
            ZanTin.Enabled = true;
            JiXu.Enabled = false;
        }

        private void ZanTin_Click(object sender, EventArgs e)//暂停按钮
        {
            if (th.ThreadState != ThreadState.Running)
            {
                th.Suspend();//线程挂起/暂停加载进度条
            }
            JiXu.Enabled = true;
            ZanTin.Enabled = false;
        }

        private void TinZhi_Click(object sender, EventArgs e)//停止按钮
        {
            SheDinShiJian.Enabled = true;
            progressBar1.Value = progressBar1.Maximum;
            textBox1.Enabled = true;
            textBox1.Text = "";        
            textBox2.Text = "===============================" + Environment.NewLine + DateTime.Now + " 设置时间成功,请按开始键继续!";
            TinZhi.Enabled = false;
            ZanTin.Enabled = false;
            th.Abort();//整个线程终止运行
        }
    }

你可能感兴趣的:(Csharp控件解析)