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 ...
随机推荐
- AIX 系统补丁升级步骤
AIX 系统补丁升级步骤 1.升级之前建议备份 rootvg (推荐) # smit mksysb 2.检查系统版本号 # oslevel -r 3.找到补丁光盘或者下载补丁,上传到服务器 ...
- linux下支持托盘的邮件客户端Sylpheed
在网上搜索了很多客户端想支持系统托盘,发现一个很不错的邮件客户端Sylpheed.设置方式和foxmail很像,最为重要的是支持系统托盘,很方便,默认没有开启,简单设置下:配置->通用首选项-& ...
- DEDE 修改后台图集上传单个图片的大小限制
默认情况下,DEDE图集中单个图片大小限制在2M以内,而有时我们需要上传一个2M以上的文件,这是只要修改几个文件就可以实现了. 一.需要修改php.ini这个文件,我们必须保证PHP的配置中允许上传一 ...
- 【Codeforces Round #460 (Div. 2) A】 Supermarket
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 就是让你求m*(ai/bb)的最小值 [代码] #include <bits/stdc++.h> #define dou ...
- MySQL事务(event scheduler)的学习【事务创建之后,没有运行的问题】
[本篇文章主要解决的是,MySQL事务创建之后,没有运行的问题] 首先从这里开始:http://www.w3schools.in/mysql/event-schedule/,创建了基本的MySQL事务 ...
- ajax动态更新下拉列表
前面做了一个ajax的小demo,今天看一个动态更新下拉列表,或者也叫级联更新下拉列表,这个也是利用ajax的异步调用去后台实现数据请求.然后回到前台完毕下拉列表数据的更新,以增强web应用的交互性. ...
- vim基础学习之自动补全功能
本章我们学习自动补全功能1.自动补全优先从当前的编辑区获得补全列表例如:我们写下如下内容 aaaaa aabbb aaab 当我们再次输入aa,然后我们按下Tab的时候,会弹出一个包含 aaaaa a ...
- onvif开发总结
ONVIF开发经验总结 ONVIF开发经验总结............................................................................. ...
- js -- 分页功能
html 代码 <html> <head> <meta charset='utf-8'> <script type="text/javascript ...
- jq ---- 实现浏览器全屏
// 点击进入全屏 方法. var fullscreen=function(){ elem=document.body; if(elem.webkitRequestFullScreen){ elem. ...