在winform程序中如何显示某个方法执行进度的进度条(也可以不显示进度的百分比,能显示当然最好)?因为执行某些方法时带有比较复杂的业务逻辑,对数据库的操作也比较慢,所有想在执行该方法时给用户界面显示一个进度,当该方法执行完毕后再关闭该进度条.

解决方案 »

  1.   

    2005 BackgroundWorker 
    2003 ProgressBar
      

  2.   

    执行的方法最好是循环的~~~~那么在类里面定义一个属性,用来记录方法的进度,
    比如属性T,在方法里面调用(递增)T..
    属性T被定义为每次为T赋值的话就调用一次自定义的方法OnTChanged()~~
    然后再暴露一个事件委托TChanged给外部,例如进度条使用~~~
      

  3.   

    int _t=0;
    //定义一个委托数据类型
    //定义一个委托类型
    //声明一个该委托类型事件TChanged;
    public int T{
        get{return _t;}
        set{
            _t=value;
            OnTChanged();
        }
    }
    void OnTChanged(){
        //创建一个时间产生的数据类型e,将T值赋给e
        if(TChanged!=null){
            TChaned(this,e);
    }
    };//---------------
    在类的外部根据事件去搞进度条~~~`
      

  4.   

    方法不是循环的,主要是由于操作数据库比较慢.
    此时可以不要精确的进度显示,只要显示一个窗口,提示系统正在运行中即可,就像windows系统启动时给出的"正在启动..."一样.
      

  5.   

    BackgroundWorker实例
    http://idior.cnblogs.com/archive/2005/08/18/217796.html
      

  6.   

    google里搜一下,要学会自己找帮助。
      

  7.   

    delegate void myDelegate(int i, bool flag);
    public void ShowMessage(int i, bool flag){
    if(flag == true)
    {
    this.textBox1.Text = i.ToString();
    this.progressBar1.Value = i;
    }
    else{
    this.textBox2.Text = i.ToString();
    }
    }public void MyEvent(){
    mutex.WaitOne();
    for(int i=0; i<=100; i++)
    {
    Thread.Sleep(1000);
    this.BeginInvoke(mydelegate, new Object[] {i, true});
    }
    mutex.ReleaseMutex();
    }private void button1_Click(object sender, System.EventArgs e)
    {
    Thread myThread = null;
    mydelegate = new myDelegate(ShowMessage);
    myThread = new Thread(new ThreadStart(MyEvent));
    myThread.IsBackground = true;
    myThread.Start();
    }