c#委托的异步调用 简单示例
2011-06-18 11:35
375 查看
委托的异步调用
有时,如果要让委托去完成一个复杂耗时的任务时,同步调用不是一个好的选择,因为这样用户面临的是无聊的时间消耗和漫长(相对来说)的等待。这时委托的异步调用就体现出了优势,关于委托的异步调用C#也做了封装,通过beginInvoke和endInvke来完成。下面给出一个例子。
1.
定义了一个委托,myDelegate
2.
定义了一个事件用于外部订阅
3.
Increment,测试字段
4.
doIt方法,每次被调用时increment都会自增,当值为5时,异步调用事件
重点在于这段代码:
BeginInvoke函数包含四个参数:
AsyncCallback
对象:这个参数的意思是,告诉它当回调完成时,下一步该做什么,因此需要传递给它一个方法。new AsyncCallback(此处接收一个方法,这里我用了lambda表达式)。
Object
对象:要传递给回调结束时所调用方法的参数。
AsyncResult ar = (AsyncResult)ia;////获得传入的IasyncResult,转化为AsyncResult对象
MyDelegate md = ar.AsyncDelegate as MyDelegate;////获得callBack对象
int r = md.EndInvoke(ia);////结束委托的调用,获得返回值
MessageBox.Show(r.ToString() + ia.AsyncState);////验证是否取到了返回值
OK,现在关于异步委托已经定义好了,下一步就是调用了:
代码说明:
New
一个timer和一个asyntroniseDelegate对象。
订阅callBack事件,方法最后,返回了一个1。
用timer完成increment累加的操作,每一秒累加1。
当increment累加到5的时候,callback事件触发,此时让它去执行一个很复杂的任务,循环了10亿次。
运行之后,将会看到
的提示框,紧接着是
,大约过了2-3秒提示框出现,然后是
和
(可见,异步调用的最后,我们成功的取得了方法的返回值)
有时,如果要让委托去完成一个复杂耗时的任务时,同步调用不是一个好的选择,因为这样用户面临的是无聊的时间消耗和漫长(相对来说)的等待。这时委托的异步调用就体现出了优势,关于委托的异步调用C#也做了封装,通过beginInvoke和endInvke来完成。下面给出一个例子。
1.
定义了一个委托,myDelegate
2.
定义了一个事件用于外部订阅
3.
Increment,测试字段
4.
doIt方法,每次被调用时increment都会自增,当值为5时,异步调用事件
重点在于这段代码:
IAsyncResult result = this.callBack.BeginInvoke (new AsyncCallback( (ia) => { MessageBox.Show("completed"); AsyncResult ar = (AsyncResult)ia; MyDelegate md = ar.AsyncDelegate as MyDelegate; int r = md.EndInvoke(ia); MessageBox.Show(r.ToString() + ia.AsyncState); }), "message"); MessageBox.Show("begin invoke");
BeginInvoke函数包含四个参数:
AsyncCallback
对象:这个参数的意思是,告诉它当回调完成时,下一步该做什么,因此需要传递给它一个方法。new AsyncCallback(此处接收一个方法,这里我用了lambda表达式)。
Object
对象:要传递给回调结束时所调用方法的参数。
AsyncResult ar = (AsyncResult)ia;////获得传入的IasyncResult,转化为AsyncResult对象
MyDelegate md = ar.AsyncDelegate as MyDelegate;////获得callBack对象
int r = md.EndInvoke(ia);////结束委托的调用,获得返回值
MessageBox.Show(r.ToString() + ia.AsyncState);////验证是否取到了返回值
OK,现在关于异步委托已经定义好了,下一步就是调用了:
代码说明:
New
一个timer和一个asyntroniseDelegate对象。
订阅callBack事件,方法最后,返回了一个1。
用timer完成increment累加的操作,每一秒累加1。
当increment累加到5的时候,callback事件触发,此时让它去执行一个很复杂的任务,循环了10亿次。
运行之后,将会看到
的提示框,紧接着是
,大约过了2-3秒提示框出现,然后是
和
(可见,异步调用的最后,我们成功的取得了方法的返回值)
相关文章推荐
- C# 委托的三种调用示例(同步调用 异步调用 异步回调) 之 FUNC 版
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
- 20160711--C# 委托的三种调用示例(同步调用 异步调用 异步回调)【转载】
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)
- C# 创建、部署和调用WebService简单示例
- C#委托的异步调用
- C# 代码示例详尽剖析异步调用的两种方法
- C#简单示例调用存储过程
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- C#通过委托和异步调用实现窗体间的通讯
- 基于委托的异步调用,一个简单的同步调用,以及对AsyncCallback,IAsyncResult,AsyncResult,BeginInvoke,EndInvoke的概述性解释
- C#调用C++的COM组件简单示例
- C#委托的异步调用[转]
- C#委托的同步调用、异步调用、异步回调
- C# 创建、部署和调用WebService的简单示例
- C#调用Python脚本的简单示例
- C#委托的同步调用和异步调用介绍
- C#委托的异步调用[转]