天天看点

多线程委托回调

 public void updateme()  程序调用这个函数

        {

            lbltime.text = "正在读取数据...";

            if (isruning) return;

            isruning = true;

            this.btndo.enabled = false;

            lv.items.clear();  设置一些数据 , 比如提示或者 按钮等. 查询期间是不允许操作的.  

            system.threading.threadpool.queueuserworkitem( _updateme  );//请求一个线程池中的线程 , 让他完成一个操作 这个操作_updateme  .

        }

          public delegate void d_updateme(); 用于回调的委托 .

          public void _updateme(object state )     供给线程调用的函数.

            asynccallback ac=new asynccallback(updateme_);           创建一个回调 . 回调函数updateme_        

            getalog gal = new getalog(bll.traffic.getalog);把要执行的代码创建到委托里 .

            iasyncresult result = gal.begininvoke(logdatetime,  _vdi , ac, gal);         开始执行该委托.  

        public void updateme_(iasyncresult iar) ///这里是回答内容.

            getalog gal = (getalog)iar.asyncstate;委托转换 .

            datatable t = gal.endinvoke(iar); 调用结束委托方法,取得返回值 .

            this.begininvoke(new duupdateme(uupdateme), t); 调用窗体中的uupdateme函数 ,使得使用t值,

           这个地方我没太注意, 我不知道回调是由窗体线程还是刚才线程池中的线程.

        delegate void duupdateme(datatable t); //委托 .

        private void uupdateme(datatable t )

这个函数中就是处理数据的.

}