为何小弟我的progressbar总是在切换完毕后,才开始滚动
为何我的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++;
}
}
里面如何操作,自己写吧