ProgressBar(进度条)

ProgressBar四个重要属性:
1. Value 当前进度条加载
该属性含义为:设置进度条的进度值
有两张方式进行设置:
一、progressBar.Value = https://www.it610.com/article/1000;
二、progressBar.increment(1000);
2. Step 进度条递增
该属性含义为:控制增长的幅度。
引用Step属性的一个重要方法是ProgressBar.PerformStep(),
主要用于递增该值Step属性,来控制Value属性递增情况。
3. Minimum 进度条最小值
4. Maximum 进度条最大值
ProgressBar(进度条)
文章图片

【ProgressBar(进度条)】下面分享个人对于同一个程序,不同的编写代码。
第一个代码程序利用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 = https://www.it610.com/article/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 + "%"); } } #endregionprivate 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 = https://www.it610.com/article/progressBar1.Minimum; Rz("进度条已停止"); }

ProgressBar(进度条)
文章图片

第二个代码程序则使用多线程中的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 = https://www.it610.com/article/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(); } #endregionprivate 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 = https://www.it610.com/article/progressBar1.Maximum; textBox1.Enabled = true; textBox1.Text =""; textBox2.Text = "===============================" + Environment.NewLine + DateTime.Now + " 设置时间成功,请按开始键继续!"; TinZhi.Enabled = false; ZanTin.Enabled = false; th.Abort(); //整个线程终止运行 } }

    推荐阅读