关闭

多线程委托回调

569人阅读 评论(0) 收藏 举报
 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 )
        {
这个函数中就是处理数据的.

}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:49250次
    • 积分:922
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:6篇
    • 译文:0篇
    • 评论:10条
    最新评论
    我的站点