日期:2014-05-18  浏览次数:21002 次

这个循环进度条程序对吗?
C# code
  private void Form1_Load(object sender, EventArgs e)
        {
            toolStripProgressBar1.Maximum = 100;
            toolStripProgressBar1.Value=1;
            while (toolStripProgressBar1.Value <100)
            {
                toolStripProgressBar1.Value = toolStripProgressBar1.Value+1;
                if (toolStripProgressBar1.Value == 99)
                {
                    toolStripProgressBar1.Value = 1;
                } 
            }
        }

如果是对的话为什么vs2010里面启动调试winform窗口显示不出来呢?
如果把 if (toolStripProgressBar1.Value == 99)
  {
  toolStripProgressBar1.Value = 1;
  } 
这段注释掉就一切正常,不知道为什么。。。。。

------解决方案--------------------
加一个timer控件。设置上时间间隔。在timer控件的方法里设置进度条循环,每次执行把滚动条的value加1。你先把timer控件设置成30毫秒试试。看效果不理想在调一调。

------解决方案--------------------
多开一个线程来实现,把实现放在线程里去做,然后在form_load启动线程,注意跨线程调用控件
------解决方案--------------------
1.用另外一个线程来循环更新进度条
2.将value暴露,让外面可以访问,可以更改,这样随时显示/关闭进度条
------解决方案--------------------
C# code
public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
            
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            Thread t1 = new Thread(new ThreadStart(DoRecycle));
            t1.Start();

        }

        private void DoRecycle()
        {
            pb.Maximum = 100;
            pb.Visible = true;
            pb.Value = 1;
            while (true)
            {
                pb.Value++;
                
                if (pb.Value == 100)
                {
                    pb.Value = 1;
                }
                Thread.Sleep(100);
            }
        }

------解决方案--------------------
像楼主把写在load事件或者按钮click事件直接执行while会导致程序假死,UI主线程一直在执行你的while,跳不出这个循环,根本就没有机会去做其他的事情,想要实现这个效果要再开一个线程去处理进度条(就像16楼),或者用一个System.Windows.Forms.Timer 控件实现,建议楼主去看看多线程、同步、异步