多線程委托回調
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 )
{
這個函數中就是處理數據的.
}
最後更新:2017-04-02 00:06:24