天天看點

多線程委托回調

 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 )

這個函數中就是處理資料的.

}