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 )
{
这个函数中就是处理数据的.
}
多线程委托回调
2023-10-23 20:51:28