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 )
這個函數中就是處理資料的.
}