首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

为何小弟我的progressbar总是在切换完毕后,才开始滚动

2012-07-23 
为何我的progressbar总是在切换完毕后,才开始滚动先添加了 timer1C# code private void timer1_Tick(objec

为何我的progressbar总是在切换完毕后,才开始滚动
先添加了 timer1

C# code
 private void timer1_Tick(object sender, EventArgs e)        {            if (progressBar1.Value < progressBar1.Maximum)            {                progressBar1.PerformStep();            }            else if (progressBar1.Value == progressBar1.Maximum)            {                progressBar1.Value = 0;            }        }


在 statusstrip1 添加了一个progressbar1,

C# code
 private void radioButton2_CheckedChanged(object sender, EventArgs e)        {            if (radioButton2.Checked)            {                timer1.Enabled = true;                //这里是大量的单元格数值计算,并填充单元格            }        }


为何切换已经完毕了,progresbar才开始滚动,而且反复滚动,停不下来

[解决办法]
请把大量的计算移出UI线程
[解决办法]
是不是在执行大量单元格数值计算的时候界面假死 执行完之后进度条就一直滚动?
如果是的话那就是说timer1_Tick在你的UI线程里面 执行大量单元格数值计算的时候线程阻塞 所以没法实时更新你的进度条 等到计算结束 timer1_Tick又再不停的执行 所以停不下来(从名字就可以看出来 Tick差不多就是一直在被触发)
[解决办法]
探讨

界面县城与计算线程处于同一线程内,界面没机会更新。所以....

[解决办法]
用timer1_Tick做进度条会不准确,可能会出现你数据还没处理完,进度条已经显示完了,
可以这样

 private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
if (radioButton2.Checked)
{
Thread thread=new Thread(new ThreadStart(Do));
thread.IsBackground=true;
thread.Start();
}
}

private void Do()
{
//这里是大量的单元格数值计算,并填充单元格
progressBar1.Maximum=100;
for(int i=0;i<100;i++)
{
progressBar1.value++;
}
}
里面如何操作,自己写吧

热点排行