委托的Invoke是同步调用,等价于直接使用()来执行。

BeginInvoke是异步调用,BeginInvoke直接返回,EndInvoke阻塞直到委托执行结束。

下面这段代码可以很清晰的把这几个方法描述清楚:

            // 定义一个委托Func<string, string> f = new Func<string, string>((s)=> {for (int i = 0; i <= 100; i += 10){Thread.Sleep(200);}return "ThreadId: " + Thread.CurrentThread.ManagedThreadId + " - ActionResult: " + s;});// 阻塞方式执行,下面两种调用方式是等价的string r1 = f("A");string r2 = f.Invoke("A");MessageBox.Show(r1 + " - " + r2);AsyncCallback callback = new AsyncCallback((iar) =>{// 通过f.EndInvoke(ar)获得委托的返回值// 如果不能通过上下文获得f,也可以这样获得:(Func<string, string>)(iar as AsyncResult).AsyncDelegate// iar.AsyncState是BeginInvoke调用时传入的@object参数MessageBox.Show(f.EndInvoke(iar) + " - " + iar.AsyncState);});// BeginInvoke调用立即返回IAsyncResult result = f.BeginInvoke("for delegate", callback, "for callback");// 查询异步调用是否结束,结束时callback同时被调用// 超时返回false,调用结束返回trueint timeOutCount = 0;while (!result.AsyncWaitHandle.WaitOne(10)){timeOutCount++;}MessageBox.Show("超时次数:" + timeOutCount);

转载于:https://www.cnblogs.com/zhuyingchun/p/9593445.html

委托的Invoke与BeginInvoke相关推荐

  1. 委托的Invoke 和 BeginInvoke 与Control的Invoke和BeginInvoke(转-因为写得很好)

    原文地址:http://www.cnblogs.com/worldreason/archive/2008/06/09/1216127.html Invoke and BeginInvoke Invok ...

  2. C#中的Invoke和BeginInvoke

    一.Control#Invoke() 和Control#BeginInvoke() 在非UI线程中调用MessageBox.Show()结果是非模态对话框: 在UI线程中调用MessageBox.Sh ...

  3. (转)Invoke and BeginInvoke

    Invoke and BeginInvoke 在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate,至于委托的本质请参考我的另一随笔:对.net事件的看法. 一.为什么 ...

  4. 为什么Control类提供了Invoke和BeginInvoke机制

    在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate,至于委托的本质请参考我的另一随笔:对.net事件的看法. 一.为什么Control类提供了Invoke和Begin ...

  5. c# Invoke和BeginInvoke 区别

    转自http://www.cnblogs.com/c2303191/articles/826571.html Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线 ...

  6. c# Invoke和BeginInvoke 区别详解

    Control.Invoke 方法 (Delegate):在拥有此控件的基础窗口句柄的线程上执行指定的委托. Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句柄 ...

  7. C# 多线程修改控件时遇到:创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke

    一般在多线程调用UI控件时,涉及到跨线程修改UI,需要使用委托,比如如下: this.Invoke((MethodInvoker)delegate{btnRefresh.Enabled = true; ...

  8. C#中Invoke 和 BeginInvoke的涵义和区别

    BeginInvoke 方法真的是新开一个线程进行异步调用吗? 参考以下代码: public delegate void treeinvoke(); private void UpdateTreeVi ...

  9. 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)

    今天无意中看到有关Invoke和BeginInvoke的一些资料,不太清楚它们之间的区别.所以花了点时间研究了下. 据msdn中介绍,它们最大的区别就是BeginInvoke属于异步执行的. Cont ...

  10. C#:invoke 与 BeginInvoke使用区别

    invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和beg ...

最新文章

  1. 健身前到底该不该吃东西
  2. cleaning selected projects has encountered a problem errors occurred during build
  3. Java字符串与包装类
  4. java实现儿时的超级玛丽游戏
  5. 将 iOS 软件移植到 Windows 10 的桥梁将很快打通
  6. Structs1.0入门知识
  7. php网页qq客服代码,qq客服代码,网页QQ在线客服代码
  8. 易康EPS2的使用(一)
  9. (转)移动端自适应方案
  10. 手工从grub引导进入Ubuntu16.04
  11. 关于linux中limits的一些总结
  12. 数值微分的python实现
  13. chrome-调试按钮详解
  14. 步进电机控制器设计 利用Quartus ii9.0设计一个具有四相单四拍
  15. Delphi创建COM组件并分别用Delphi和html调用该组件的简单实例
  16. 最干净的U盘启动工具:微PE
  17. SQL注入-bWAPP靶场-时间盲注
  18. activiti使用详解
  19. codeforce 3B lorry (贪心)
  20. Android 自动亮度

热门文章

  1. 脚本——LoadRunner文件操作函数详解
  2. 配置IIS5.5/6.0 支持 Silverlight
  3. HTML5 History API让ajax能回退到上一页
  4. java 静态导入 import static
  5. Android的代码同步repo
  6. Linux学习之十一、环境变量的功能
  7. Centos 6.4 安装erlangrabbitmq
  8. 控制反转与依赖注入概述——Spring IOC/DI(一)
  9. android获取屏幕控件位置问题
  10. [2018.09.12 T1] 下落的圆盘