AsyncCallback BeginInvode endinvode 异步调用
下面是搜藏的代码:
- //首先准备好,要进行C#异步调用的方法(能C#异步调用的,最好不多线程)
- private string MethodName(int Num, out int Num2)
- {
- Num2 = Num;
- return "HelloWorld";
- }
- //程序终点
- //C#异步调用完成时,执行的方法(回调方法),
- //此方法只能有IAsyncResult一个参数,但是该参数几乎万能,可以传递object
- private void CallBackMethod(IAsyncResult ar)
- {
- //从C#异步调用状态ar.AsyncState中,获取委托对象
- DelegateName dn = (DelegateName)ar.AsyncState;
- //输出参数
- int i;
- //一定要EndInvoke,否则你的下场很惨
- string r = dn.EndInvoke(out i, ar);
- MessageBox.Show("C#异步调用完成喽!i的值是" i.ToString() ",r的值是" r);
- }
- //定义与方法同签名的委托
- private delegate string DelegateName(int Num, out int Num2);
- //程序入口
- private void Run()
- {
- //实例化委托并初赋值
- DelegateName dn = new DelegateName(MethodName);
- //输出参数
- int i;
- //实例化回调方法
- //把AsyncCallback看成Delegate你就懂了,
- //实际上AsyncCallback是一种特殊的Delegate,就像Event似的
- AsyncCallback acb = new AsyncCallback(CallBackMethod);
- //C#异步调用开始
- //如果参数acb换成null则表示没有回调方法
- //最后一个参数dn的地方,可以换成任意对象,
- //该对象可以被回调方法从参数中获取出来,写成null也可以。
- //参数dn相当于该线程的ID,如果有多个C#异步调用线程,
- //可以都是null,但是绝对不能一样,不能是同一个object,否则异常
- IAsyncResult iar = dn.BeginInvoke(1, out i, acb, dn);
- //去做别的事
- //…………
- }
- //最后的结果应该是:i=1,r="HelloWorld"
另外,如果可以,定义委托的时候可以选择不用过多的修饰:
- /// ﹤summary﹥
- /// 定义委托
- /// ﹤/summary﹥
- /// ﹤returns﹥﹤/returns﹥
- public delegate bool Asyncdelegate();
- /// ﹤summary﹥
- /// Callback method must have the same signature as the
- /// AsyncCallback delegate
- /// ﹤/summary﹥
- /// ﹤param name="ar"﹥﹤/param﹥
- private void CallbackMethod(IAsyncResult ar)
- {
- // Retrieve the delegate.
- Asyncdelegate dlgt = (Asyncdelegate)ar.AsyncState;
- // Call EndInvoke to retrieve the results.
- dlgt.EndInvoke(ar);
- }
其他方法中调用:
- //C#异步调用执行
- //指定委托方法
- Asyncdelegate isgt = new Asyncdelegate(icpInfo.Insert);
- IAsyncResult ar = isgt.BeginInvoke(
- new AsyncCallback(CallbackMethod), isgt);
AsyncCallback BeginInvode endinvode 异步调用的更多相关文章
- C#异步调用的应用实践浅谈
C#异步调用的应用实践最经公司工作需要调用一个外部的webservice,同时要将传出的数据进行保存,以自己以前的习惯,就打算逐步操作,失败啊,完全没考虑过用户体验效果,在同事指点下,意识到使用C#异 ...
- .Net组件程序设计之异步调用
.Net组件程序设计之异步调用 说到异步调用,在脑海中首先想到就是BeginInvoke(),在一些常用对象中我们也会常常见到Invoke()和BeginInvoke(), 要想让自己的组件可以被客户 ...
- C#异步调用的方法
最经公司工作需要调用一个外部的webservice,同时要将传出的数据进行保存,以自己以前的习惯,就打算逐步操作,失败啊,完全没考虑过用户体验效果,在同事指点下,意识到使用异步调用的好处,随便将自己找 ...
- 委托(delegate)的三种调用方式:同步调用,异步调用,异步回调(转载)
下面为即将被调用的方法: public delegate int AddHandler(int a,int b); public class 加法类 { public static int Add(i ...
- WCF初探-11:WCF客户端异步调用服务
前言: 在上一篇WCF初探-10:WCF客户端调用服务 中,我详细介绍了WCF客户端调用服务的方法,但是,这些操作都是同步进行的.有时我们需要长时间处理应用程序并得到返回结果,但又不想影响程序后面代码 ...
- c# 多线程与异步调用
异步操作的本质 在方法调用前为异步方法指定一个回调函数,方法调用后被线程池中的一个线程接管,执行该方法.主线程立即返回,继续执行其他工作或响应用户请求.如果异步方法执行完 毕,回调函数被自动执行,以处 ...
- 序列化和反序列化,异步调用web/wcf/函数
//xml序列化 public static string Seria(DataSet ds) { XmlSerializer serializer = new XmlSerializer(typeo ...
- C#“同步调用”、“异步调用”、“异步回调”
本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: ); //模拟该方法运 ...
- C#委托的异步调用1
本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: /*添加的命名空间 u ...
随机推荐
- 菜鸟之路——Java并发(二)ThreadLocal
一.什么是ThreadLocal ThreadLocal,非常多地方叫做线程本地变量,也有些地方叫做线程本地存储.事实上意思几乎相同.非常多博客都这样说:ThreadLocal为解决多线程程序 ...
- JavaScript表单项数据过滤代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- IT痴汉的工作现状41-亲历招投标
2015年9月3日早7点,复兴门外大街已是车水马龙.伟仔早早的从东直门赶到这里.呼吸着首都特有的雾气,回味着昨晚与齐天的那一顿簋街麻小,想象着今天的大场面,心中不免有一丝紧张. 今天是个重要的日子,是 ...
- iOS使用push隐藏子页面底部bottom TabBar
下面两种情况是我在开发过程中遇到的,一种是代码使用pushViewController,还有一种是storyboard直接使用push.之前也查阅了非常多关于隐藏底部tabbar的资料.可是要么使用起 ...
- centOS6.3(64bit)Hadoop的Eclipse开发环境搭建
操作系统centos6.3(64位) 一个namenode 两个datanode Hadoop版本号:hadoop-1.1.2 Eclipse版本号:eclipse-standard-kepler-S ...
- jQuery11 data() : 数据缓存
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- jquery07
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- Android学习笔记之图像颜色处理(ColorMatrix)
对图像进行颜色方面的处理,通过使用颜色矩阵(ColorMatrix)来实现.从而可以达到很多特效如黑白老照片.泛黄旧照片等等. 1.颜色矩阵(ColorMatrix) 这里有详细的介绍:http:// ...
- vue --- 全局守卫
vue2.0 实现导航守卫(路由守卫) 路由跳转前做一些验证,比如登录验证,是网站中的普遍需求. 对此,vue-route 提供的 beforeRouteUpdate 可以方便地实现导航守卫(navi ...
- 项目融入mongoDB
1.pom.xml导入jar包 <!-- mongoDB --> <dependency> <groupId> ...