private void button1_Click(object sender, System.EventArgs e) 

    //实例化一个线程,并引用线程开始执行时要调用的方法 
     //这个方法在线程调用start()方法时启动 
     barProgress = new Thread(new ThreadStart(ProgressProc)); 调用线程启动ProgressProc方法    barProgress.IsBackground = true;     barProgress.Start(); 
    button2.Enabled=true; 
    button1.Enabled=false; 
    button4.Enabled=true; } 
private void ProgressProc()  

    MethodInvoker mi = new MethodInvoker(UpdateProgress);//MethodInvoker表示一个委托,该委托可以执行托管代码中声明为VOID,且不接受任何参数的任何方法。 UpdateProgress为实现该委托的方法。该方法是没有任何参数的方法    while (true)  
    { 
       Invoke(mi); 
       int sleepTime = this.waitTime; 
       Thread.Sleep(sleepTime) ; 
    } } 
private void UpdateProgress()  //实现UpdateProgress

    double  completed ; 
    double  number; 
    if (progressBar1.Value == progressBar1.Maximum)  
    { 
       progressBar1.Value = progressBar1.Minimum ; 
    } 
    else  
    { 
       progressBar1.PerformStep(); 
    } 
    number=this.progressBar1.Value; 
    completed   = (number/100) * 100.0 ;     completedlabel.Text = Math.Round(completed).ToString() + "%" ;

解决方案 »

  1.   


    private void ProgressProc()  

        //实例化一个MethodInvoker委托 
      MethodInvoker mi = new MethodInvoker(UpdateProgress);   while (true) //如果为真则循环下面的方法 
      { 
        Invoke(mi); //指定执行mi委托
        int sleepTime = this.waitTime; //等待时间
        Thread.Sleep(sleepTime) ; //线程等待时间
      } }private void button1_Click(object sender, System.EventArgs e) 

    //实例化一个线程,并引用线程开始执行时要调用的方法 
    Thread barProgress = new Thread(new ThreadStart(ProgressProc)); //创建新线程调用实现委托的方法。barProgress.IsBackground = true; //后台执行barProgress.Start(); //线程开始执行button2.Enabled=true; 
    button1.Enabled=false; 
    button4.Enabled=true; } private void UpdateProgress()  //MI委托的具体实现方法

        double  completed ; 
        double  number; 
        if (progressBar1.Value == progressBar1.Maximum)  //如果进度条为最大值时
        { 
           progressBar1.Value = progressBar1.Minimum ; //进度条回到最小值
        } 
        else  //否则
        { 
           progressBar1.PerformStep(); //按照PerformStep设置的VALUE继续增加
        } 
        number=this.progressBar1.Value; //给number赋值
        completed   = (number/100) * 100.0 ; //因该属于进度的大小step    completedlabel.Text = Math.Round(completed).ToString() + "%" ;
      

  2.   

        //实例化一个MethodInvoker委托 
      MethodInvoker mi = new MethodInvoker(UpdateProgress);   while (true) //如果为真则循环下面的方法 
    这个true是一直都是真吗?
    写这个while(true)有什么作用呢?