当我们定义一个委托的时候,一般语言运行时会自动帮委托定义BeginInvoke 和 EndInvoke两个方法,这两个方法的作用是可以异步调用委托。

方法BeginInvoke有两个参数:

  • AsyncCallBack:回调函数,是一个委托,没有返回值,可以传一个参数,参数类型是object;
  • object AsyncState :回调函数的参数。

BeginInvoke的返回值是IAsyncResult,

方法EndInvoke需要的参数是BeginInvoke的返回值IAsyncResult.

举例如下:

    class AsyncStateTest{private delegate void DelegateTest();public static void TestAsyncState(){DelegateTest delegateTest = new DelegateTest(delegateImpl);Console.WriteLine("Main method begin delegateTest");IAsyncResult asyncResult = delegateTest.BeginInvoke(new AsyncCallback(CallBack), "I am AsyncState(*_*)");//delegateTest.EndInvoke(asyncResult);Console.WriteLine("Main method end delegateTest");delegateTest.EndInvoke(asyncResult);Console.WriteLine("Main method continue");}private static void CallBack(IAsyncResult asyncResult){object state = asyncResult.AsyncState;Console.WriteLine(state.ToString());}private static void delegateImpl(){Console.WriteLine("I am DelegateTest Impl");}}

运行结果:

Main method begin delegateTest
Main method end delegateTest
I am DelegateTest Impl
Main method continue
I am AsyncState(*_*)

可以看到,主线程的输出先于委托方法的输出,证明该方法被异步执行了。另外EndInvoke方法的作用是阻塞线程(调用委托的主线程),使之等到委托的方法执行完毕(但是不会等到委托的回调函数执行完毕),上面的代码换一下EndInvoke方法的位置可以看到结果。

转载于:https://www.cnblogs.com/heisehenbai/p/10100278.html

异步使用委托delegate --- BeginInvoke和EndInvoke方法相关推荐

  1. C#线程系列讲座(1):BeginInvoke和EndInvoke方法

    本文是转载,原文地址:http://www.itpub.net/thread-1021075-1-1.html 几个关键词:IAsyncResult,isComplete,asyncResult.As ...

  2. Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)

      http://www.cnblogs.com/renhaojie/archive/2009/09/10/1564052.html http://www.cnblogs.com/worldreaso ...

  3. BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题

    BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题 参考文章: (1)BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题 (2)https://www. ...

  4. Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)2

    七.其他组件的BeginXXX和EndXXX方法 在其他的.net组件中也有类似BeginInvoke和EndInvoke的方法,如System.Net.HttpWebRequest类的BeginGe ...

  5. 异步编程中的BeginInvoke和EndInvoke

    如果委托对象的调用列表中只有一个方法(引用方法),就可以异步执行这个方法,通过调用委托类特有的两个方法BeginInvoke和EndInvoke去执行. BeginInvoke和EndInvoke 的 ...

  6. 委托的BeginInvoke和EndInvoke

    刚刚搞明白了C#的异步调用,写下来,方便后续调用. 异步主要是解决UI假死的问题,而开辟出一个新的线程,处理大数据. 1.既然是委托的调用,那么先定义个委托: public delegate bool ...

  7. Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)3

    近日,被Control的Invoke和BeginInvoke搞的头大,就查了些相关的资料,整理如下.感谢这篇文章对我的理解Invoke和BeginInvoke的真正含义 . (一)Control的In ...

  8. C# BeginInvoke和EndInvoke方法

    http://www.csharpwin.com/csharpspace/11948r7265.shtml 转载于:https://www.cnblogs.com/luciakally/p/48493 ...

  9. Mcad学习笔记之异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)...

    收藏地址  http://aierong.cnblogs.com/archive/2005/05/25/162308.html 让我们来看看同步异步的区别: 同步方法调用在程序继续执行之前需要等待同步 ...

最新文章

  1. 汇编语言TEXTEQU伪指令
  2. (三)用docker-compose部署postgres+ postgis
  3. 【Android 初学】3、控件布局初步
  4. mysql锁优化_mysql锁以及配置优化
  5. python字符串驻留机制_Python中的字符串驻留
  6. 怎样把百度图片设置成传统翻页 瀑布流与传统翻页的转换
  7. 2022阿里巴巴全球数学竞赛 第4题 虎虎生威(盲盒问题、集卡问题)解决思路
  8. 米思齐 超声波传感器控制小灯泡
  9. Android开发——监听Android手机的网络状态
  10. 微信公众测试号授权登录 学习笔记
  11. github python100天_GitHub - CherryXuan/Python-100-Days: Python - 100天从新手到大师
  12. 基于局部自适应色差阈值的彩色图像边缘检测_爱学术
  13. 解决Word磁盘已满不让保存的问题
  14. python数据可视化第七节(绘制3D图表和统计地图)
  15. 浅谈计通银行机房集中监控系统功能
  16. 这才是我要的工作!(强杀伤,慎入!)
  17. Win10共享打印机出现0x00000709错误
  18. fegin设置header
  19. 服务器装系统步骤图解win7,怎么装win7系统?本地硬盘安装win7/XP系统详细教程
  20. 吃人的那些 Java 名词:对象、引用、堆、栈

热门文章

  1. PHP的学习--PHP的引用
  2. eoiioe IE 和 firefox js 兼容问题
  3. TechEd 2012奥兰多!
  4. ipone 网页版的iphone
  5. vue颜色选择器_如何制作? Vue的颜色选择器!
  6. php 保存表单数据,使用jquery和php自动保存表单数据
  7. 加了好友怎么还掉血_微信聊天窗口出现风险提醒,无法添加好友解决办法
  8. golang 解析php序列化,golang实现php里的serialize()和unserialize()序列和反序列方法详解...
  9. Python控制结构总结
  10. Fedora 提出统一流程,弃用上千 Python 2 软件包更可控