注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

Delegate.BeginInvoke例子  

2011-03-05 12:42:08|  分类: C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9.   
  10. namespace CallBackTest  
  11. {  
  12.     public partial class Form1 : Form  
  13.     {  
  14.         public Form1()  
  15.         {  
  16.             InitializeComponent();  
  17.         }  
  18.   
  19.         //要进行异步的方法  
  20.         private string MethodName(int num, out int ret)  
  21.         {  
  22.             ret = num;  
  23.             return "HelloWorld";  
  24.         }  
  25.   
  26.         //定义与方法同签名的委托  
  27.         private delegate string DelegateName(int num, out int ret);  
  28.   
  29.         //回调方法(异步完成时,执行的方法,此方法只有IAsyncResult一个参数,但是该参数几乎万能,可以传递Object)  
  30.         private void CallBackMethod(IAsyncResult ar)  
  31.         {  
  32.             DelegateName dn = (DelegateName)ar.AsyncState;  
  33.   
  34.             int i;  
  35.   
  36.             string r = dn.EndInvoke(out i, ar);//一定要EndInvoke,否则你的下场很惨  
  37.             MessageBox.Show("异步完成了!i的值是"+i.ToString()+",r的值是"+r);  
  38.         }  
  39.   
  40.         private void Form1_Load(object sender, EventArgs e)  
  41.         {  
  42.             //实例化委托并初赋值  
  43.             DelegateName dn = new DelegateName(MethodName);  
  44.             int i;  
  45.             //实例化回调函数,把AsyncCallback看成是Delegate就懂了,实际上AsyncCallback是一种特殊的Delegate  
  46.             AsyncCallback acb = new AsyncCallback(CallBackMethod);  
  47.             //异步开始   
  48.             //如果参数acb换成null则表示没有回调方法   
  49.             //最后一个参数dn的地方,可以换成任意对象,该对象可以被回调方法从参数中获取出来,写成null也可以。  
  50.             //参数dn相当于该线程的ID,如果有多个异步线程,可以都是null,但是绝对不能一样,不能是同一个object,否则异常   
  51.             IAsyncResult iar = dn.BeginInvoke(1, out i, acb, dn);  
  52.         }  
  53.     }  
  54. }  

 运行结果如下:

  评论这张
 
阅读(1243)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017