c#进度条显示百分比
button1.Enabled=false;button2.Enabled=false;for(i=1;i<=100;i++){for(j=1;j<=10000;j++)...
button1.Enabled = false;
button2.Enabled = false;
for(i=1;i<=100;i++)
{
for (j = 1; j<=10000; j++)
{
if (j % 100 == 0)
progressBar1.Value = j;
}
this.progressBar2.Value = i;
label3.Text = i.ToString() + "%";
}
button1.Enabled = true ;
button2.Enabled = true;
groupBox1.Text = "程序运行结束!";
timer1.Enabled=false;
我想在label3上显示进度百分比,但是只显示0%和100%,中间的数值显示不了,是什么原因,是因为没更新吗? 展开
button2.Enabled = false;
for(i=1;i<=100;i++)
{
for (j = 1; j<=10000; j++)
{
if (j % 100 == 0)
progressBar1.Value = j;
}
this.progressBar2.Value = i;
label3.Text = i.ToString() + "%";
}
button1.Enabled = true ;
button2.Enabled = true;
groupBox1.Text = "程序运行结束!";
timer1.Enabled=false;
我想在label3上显示进度百分比,但是只显示0%和100%,中间的数值显示不了,是什么原因,是因为没更新吗? 展开
4个回答
展开全部
private volatile int currentNumber = 0;
private void Form1_Load(object sender, EventArgs e)
{
//Form加载的时候启动一个手工线程.
System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(NumberIncrement));
thread.Start();
}
//递增数字.
private void NumberIncrement()
{
for (int i = 0; i < 100; i++)
{
currentNumber += i;
//注意,当前方法由手工线程执行,无法直接对UI线程下的控件赋值.我们启用一个委托,跳回UI线程.
EventHandler eh = new EventHandler(DisplayNumber);
this.Invoke(eh, new object[] { null, null });
//为了看到效果,这里可以加上
//Thread.Sleep(30);
}
}
private void DisplayNumber(object sender, EventArgs e)
{
//这里给UI控件赋值.
//比如 txtNumber.Text = currentNumber.ToString();
}
这是我给另外一个人写的代码,不过那人试都不原意试,你愿不愿意试下?
http://zhidao.baidu.com/question/79980016.html
private void Form1_Load(object sender, EventArgs e)
{
//Form加载的时候启动一个手工线程.
System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(NumberIncrement));
thread.Start();
}
//递增数字.
private void NumberIncrement()
{
for (int i = 0; i < 100; i++)
{
currentNumber += i;
//注意,当前方法由手工线程执行,无法直接对UI线程下的控件赋值.我们启用一个委托,跳回UI线程.
EventHandler eh = new EventHandler(DisplayNumber);
this.Invoke(eh, new object[] { null, null });
//为了看到效果,这里可以加上
//Thread.Sleep(30);
}
}
private void DisplayNumber(object sender, EventArgs e)
{
//这里给UI控件赋值.
//比如 txtNumber.Text = currentNumber.ToString();
}
这是我给另外一个人写的代码,不过那人试都不原意试,你愿不愿意试下?
http://zhidao.baidu.com/question/79980016.html
展开全部
不是因为没更新,而是程序的主线程也就是UI线程被你的循环卡住了
想要实现这个效果的话,应该把更新progressbar的操作放在一个工作线程里,用thread还是backgroundworker看你自己喜欢了
分不多,就不写代码了
想要实现这个效果的话,应该把更新progressbar的操作放在一个工作线程里,用thread还是backgroundworker看你自己喜欢了
分不多,就不写代码了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不支持次线程调用主线程中控件的属性和方法,需要使用委托解决
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个一般都是模拟的不能真是反映出来的在WEB里面
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询