先添加了 timer1 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,
 private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton2.Checked)
            {
                timer1.Enabled = true;
                //这里是大量的单元格数值计算,并填充单元格
            }
        }
为何切换已经完毕了,progresbar才开始滚动,而且反复滚动,停不下来

解决方案 »

  1.   

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

  2.   

    如果嫌麻烦我这边有个现成的控件你可以拿去用 很简单http://topic.csdn.net/u/20120629/22/eed8c49b-3a75-4807-96e7-63aaa2052468.html
      

  3.   


    +1,或者加上Application.DoEvents()到循环中处理消息队列中的消息避免假死。
      

  4.   

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

  5.   


    我是用在子窗体 frmPross.cs 里面 添加了一个 progressBar1