怎么在dll库中放着计算方法,但时间比较长,为了不感觉程序像是死掉了,怎么运算的进程中,在主界面显示进度条。谢谢

解决方案 »

  1.   

    首先你的dll算法要支持进度反馈,否则主程序只能估算进度。
      

  2.   

    dll组件里面发布一个事件(客户端订阅这个事件),当运行计算的时候通过这个事件来通知调用它的客户端当前计算的情况。
      

  3.   

    在dll中加入回调函数,每计算到一定比例,就调用该函数通知主程序当前的运行进度~
      

  4.   

    我在dll中加了记录总数和当前除理的记录数,但不知道怎么反给主界面。
      

  5.   

    http://msdn.microsoft.com/zh-cn/library/48cfdff6(VS.80).aspx
    参考这个。
      

  6.   

    我觉的4楼的方法可行,但我没写过事件。刚才看了看,但不知道怎么把_RunRow 值返回主界面去。
    //声明进度条委托事件
    public delegate void delegateGetProgress(object sender);        //声明一个委托
    public class A

            //利用上面的代理声明一个事件
            public event delegateGetProgress GetProgressbar;
            /// 取进度事件
            public void  getProgressbar(object sender)
            {            if (GetProgressbar!= null)
                {
                    //调用处理事件的方法
                    GetProgressbar(sender);
                }
            }
           private int _RunRow = 0;             //当前运行的记录位置
            private int _totalLines = 0;         //文件总行数      public string[] F_AAAAA(string[] source)    //原计算用的方法
          {
               for(inti=0;i<999999;i++)
               {
                 _RunRow = i;
               }
          }
      

  7.   

    我在主程序中是这样写的。
            private void btn_Merge_Click(object sender, EventArgs e)
            {
                    txtfile.GetProgress += new delegateGetProgress(txtfile_GetProgress);                string[] Value= A.F_AAAAA(FileContent);   
            }        void txtfile_GetProgress(object sender)
            {
                MessageBox.Show("事件被调用");
            }
      

  8.   

    有个函数名写错,重写
            private void btn_Merge_Click(object sender, EventArgs e)
            {
                    txtfile.GetProgressbar += new delegateGetProgress(txtfile_GetProgressbar);                string[] Value= A.F_AAAAA(FileContent);   
            }        void txtfile_GetProgressbar(object sender)
            {
                MessageBox.Show("事件被调用");
            }
      

  9.   

    //声明进度条委托事件 
    public delegate void delegateGetProgress(object sender);        //声明一个委托 
    public class A 
    { 
            //利用上面的代理声明一个事件 
            public event delegateGetProgress GetProgressbar; 
            /// 取进度事件 
            public void  getProgressbar(object sender) 
            {             if (GetProgressbar!= null) 
                { 
                    //调用处理事件的方法 
                    GetProgressbar(sender); 
                } 
            } 
          private int _RunRow = 0;            //当前运行的记录位置 
            private int _totalLines = 0;        //文件总行数       public string[] F_AAAAA(string[] source)    //原计算用的方法 
          { 
              for(inti=0;i <999999;i++) 
              { 
                _RunRow = i; 
               
    //在这里触发事件就可以了,主界面里注册这个事件就可以得到进度了,这个委托只要传int类型就可以了
               GetProgressbar(_RunRow); 

              } 
          } 
      

  10.   

    http://blog.csdn.net/yulinlover/archive/2010/01/17/5202454.aspx这是我之前 专门 给一位同志写的,应该对你有用。