日期:2014-05-20  浏览次数:20698 次

各位大哥,帮帮小女子吧,关于Timer和进度条的问题.谢谢!!!
我在一个FORM家载时候要执行一个存储过程要较长时间,并且时间不确定。要用一个弹出窗体显示一下进度,看了许多参考资料,也看了knight94(愚翁)的文章,知道用线程和委托,但写出来还是进度条不动呀,执行完了才开始动。怎么回事呀。急呀。

//-----------窗体变量----------

            private   frmProgressBar   f   =   null;
              private   delegate   void   setPro();       //委托

    //---------启动滚动条-----------
                private   void   startPro()
                {
                      //   MethodInvoker   mi   =   new   MethodInvoker(this.timer1.Start);
                        setPro   s   =   this.timer1.Start;
                        this.BeginInvoke(s);
                        Thread.Sleep(100);
 
                }

                private   void   timer1_Tick(object   sender,   EventArgs   e)
                {
                        f.setpro();
                }

  //--------进度条窗体的方法----------------
                public   void   setpro()
                {
                        if   (progressBar1.Value   <   progressBar1.Maximum)
                        {
                                this.progressBar1.Value++;
                        }
                  }

//-------------------启动线程-----------------

            Thread   t1   =   new   Thread(new   ThreadStart(this.startPro));
            Thread   t2   =   new   Thread(new   ThreadStart(this.ExecPro));    
          //(ExecPro   是一个执行存储过程的方法)
                                t1.Start();
                                t2.Start();

                                f.Show();

------解决方案--------------------
先占个沙发 美女~
------解决方案--------------------
给你个例子。是timer控制进度条的
private void InvokeFun()
{
if (progressBar1.Value < 100)
{
progressBar1.Value = progressBar1.Value + 1;
}
}
//子线程入口
private void ThreadFun()