为何我的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++;
}
}
里面如何操作,自己写吧