我在一个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();

解决方案 »

  1.   

    小妹妹,这代码也太混乱了
    一会this一会f...........
      

  2.   

    this是当前窗体,f是进度条窗体
      

  3.   

    this.ExecPro大概要执行多长时间,感觉代码因该没问题只是代码有点乱...
    Tick设的是多少?
    Sleep(100)+Tick是否大于执行时间
    因为你说的进度条会走,只是再之后走...
      

  4.   

    this.ExecPro大概15秒,
    Tick设的1000
      

  5.   

    Thread t1 = new Thread(new ThreadStart(this.startPro));
    改成this.startPro试试
      

  6.   

    给你个例子。是timer控制进度条的
    private void InvokeFun()
            {
                if (progressBar1.Value < 100)
                {
                    progressBar1.Value = progressBar1.Value + 1;
                }
            }
            //子线程入口
            private void ThreadFun()
            {
                MethodInvoker mi = new MethodInvoker(this.InvokeFun);
                for (int i = 0; i < 100; i++)
                {
                    this.BeginInvoke(mi);
                    //Thread.Sleep(100);
                }
            }        private void button1_Click(object sender, EventArgs e)
            {
                Thread thdProcess = new Thread(new ThreadStart(ThreadFun));
                thdProcess.Start();
            }
      

  7.   

    帮你up下,方便的话把代码发到[email protected]帮你调下
      

  8.   

    已经发到邮箱了,帮忙看看,马上要交工了,TKS
      

  9.   

    搞定了
    发不出邮件不知道你收到没再贴下
    1.frmGrid里面
                    //通用加载过程
                  
                    Thread t1 = new Thread(new ThreadStart(this.startPro));
                    //startPro();
                    Thread t2 = new Thread(new ThreadStart(this.ExecPro));
                    t1.Start();
                    t2.Start();
    程序走不到这 所以先不管
    前面有个f.Show
    加上
                Thread tt1 = new Thread(new ThreadStart(this.startPro));
                tt1.Start();
                tt1.Join();后面一大堆的SQL操作不行,把它们提出来放在一个函数里面同样用线程去执行            Thread tt1 = new Thread(new ThreadStart(this.startPro));
                tt1.Start();
                tt1.Join();
                f.Show();
                //加上            Thread tht = new Thread(new ThreadStart(th//你放的函数));
                tht.Start();改        //启动滚动条
            private void startPro()
            {
               // MethodInvoker mi = new MethodInvoker(this.timer1.Start);
                //setPro s = this.timer1.Start;
                //this.BeginInvoke(s);
               // Thread.Sleep(100);
                this.BeginInvoke(new EventHandler(f.TimeStar));
     
            }改f.TimeStar定义
    public void TimeStar(object sender,EventArgs e)
      

  10.   

    你给我传的数据库放在我机器上会出错,为调试方便我就把它们用一个while代替了
    有些细节还要改,总体来说就是因为你后面的sql操作太多占用了主线程导致程序没空理会Invoke的代码,所以要把后面那一堆sql也放到线程里执行
    还一些细节要改 比如f.Close也要InvokePS:第一次看女生写的代码,还是这么大的一个项目:)女生代码写的就是工整,注释都是对齐的,界面也漂亮,就是稍微有点混乱嘻嘻
      

  11.   

    非常感谢!
    Red_angelX(当你手淫你会想起谁) 
    晚上在看看,对了,你的名字怎么听着这么别扭呀
      

  12.   

    亦或是 “余嫚晴”呢?。。
    Red的签名,倒是够狼的。。
      

  13.   

    TO:
     Red_angelX(当你手淫你会想起谁) 
    感谢你的热情,不过你的热情不要只对"女"的哟.现在对委托和线程还是有点迷糊,虽然大体知道怎么会事,不过公司刚买了<<C#高级编程第4版>>,现正在阅读委托和事件这一章,受益非浅.相信读完就会"蓦然回首,那人却在灯火阑珊处的感觉的"
    好了,接帖