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(进度条)】下面分享个人对于同一个程序,不同的编写代码。
第一个代码程序利用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("进度条已停止");
}
文章图片
第二个代码程序则使用多线程中的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();
//整个线程终止运行
}
}