这是因为你的for循环与gui线程是同一条,所以只有在执行完所有循环以后才会刷新processbar。解决方法是将循环放到另一个线程中,然后通过委托来更新processbar就可以了。
2个方法 一个是用timer控件 间隔在根据自己调节 每次progressbar的value+1 这样实现缓慢增长
或者在你的for循环里面用thread.sleep(n) n也根据自己的感觉来填写 n是代表的毫秒 原理上是跟timer控件是一样的
你就用timer控件好了 更直观 可以在form_load里面修改timer控件的间隔值
private delegate void RunText(int value);
public void LoadBar(int value)
{
if (progressBar1.InvokeRequired)
{
RunText t = new RunText(LoadBar);
this.progressBar1.BeginInvoke(t, new object[] { value });
}
else
{
this.progressBar1.Value = value;
}
}
public void ExecuteNewThread()
{
for (var i = 0; i < 10; i++)
{
for (var j = 0; j < 10000; j++)
{
LoadBar(j);
}
}
}
private void button2_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(ExecuteNewThread));
t.IsBackground = true;
t.Start();
}
progressBar1.Maximum = 100;
progressBar1.Value = 0;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
progressBar1.Value += 1;
}
}