由于主程序运算量大耗时,想用线程开启一个进度条,但是老是先主程序运行结束后,才开始运行进度条,不是同步运行的,请指点。

解决方案 »

  1.   

    简单的winform启动画面,里面有用到委托操作进度条 <--点击
      

  2.   

    使用委托:
    // 主程序中
    MainManager patManager=new Manager();
    patManager.onReportProgress=new DoReportProgress(OnReportProgress); // 同步更新进程条  patManager.DisposeRecord(); // 执行数据处理privatevoid OnReportProgress(int current,string strInfor)
      {
    if (this.InvokeRequired)
         {
    this.Invoke(new DoReportProgress(OnReportProgress),newobject[] { current%100, strInfor });
         }
    else
         {
    this.tsprogressMain.Maximum=100;this.tsprogressMain.Value= (int)current%100;
    this.tsprogressInfor.Text= strInfor;this.statusMain.Refresh();
         }
     }// MainManager类
    namespace PatrolManage
     {
    public delegatevoid DoReportProgress(int current,string strInfor);
    public class MainManager
         {
    public DoReportProgress onReportProgress;
    publicvoid DisposeRecord()
             {
    for (int i=0; i<100; i++)
                 {
                     onReportProgress(i,"正在处理数据...");
    // do something
                 }
             } 
         }
    }
      

  3.   

    晕, 这代码贴得够乱.// 主程序中
    MainManager patManager = new Manager();
    patManager.onReportProgress = new DoReportProgress(OnReportProgress);       // 同步更新进程条
    patManager.DisposeRecord();                                                 // 执行数据处理private void OnReportProgress(int current, string strInfor)
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new DoReportProgress(OnReportProgress),new object[] { current%100, strInfor });
        }
        else
        {
            this.tsprogressMain.Maximum = 100; this.tsprogressMain.Value = (int)current % 100;
            this.tsprogressInfor.Text = strInfor; this.statusMain.Refresh();
        }
    }//MainManager类
    namespace PatrolManage
    {
        public delegate void DoReportProgress(int current, string strInfor);
        public class MainManager
        {
            public DoReportProgress onReportProgress;
            public void DisposeRecord()
            {
                for (int i = 0; i < 100; i++)
                {
                    onReportProgress(i, "正在处理数据...");
                    // do something
                }
            }
        }
    }
      

  4.   


    namespace PatrolManage
    {
        public delegate void DoReportProgress(int current, string strInfor);
        public class MainManager
        {
            public DoReportProgress onReportProgress;
            public void DisposeRecord()
            {
                for (int i = 0; i < 100; i++)
                {
                    onReportProgress(i, "正在处理数据...");
                    // do something
                }
            }
        }
    }
    do something 写算法?
    那我的算法不就要重复执行100遍
      

  5.   

    DoReportProgress就相当于你的主程序运算, 那个for循环是我在随手写的一个演示代码. 你可以在运算过程中的适当的时候调用onReportProgress显示进度条. 
    至于是否把运算作为子线程来做, 看你个人而定. 上面的代码是我在项目中用到的, 所以就直接拷了下来.
      

  6.   

    N多人问的老问题
    后台线程组件backgroundworker