委托的Invoke与BeginInvoke
委托的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相关推荐
- 委托的Invoke 和 BeginInvoke 与Control的Invoke和BeginInvoke(转-因为写得很好)
原文地址:http://www.cnblogs.com/worldreason/archive/2008/06/09/1216127.html Invoke and BeginInvoke Invok ...
- C#中的Invoke和BeginInvoke
一.Control#Invoke() 和Control#BeginInvoke() 在非UI线程中调用MessageBox.Show()结果是非模态对话框: 在UI线程中调用MessageBox.Sh ...
- (转)Invoke and BeginInvoke
Invoke and BeginInvoke 在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate,至于委托的本质请参考我的另一随笔:对.net事件的看法. 一.为什么 ...
- 为什么Control类提供了Invoke和BeginInvoke机制
在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate,至于委托的本质请参考我的另一随笔:对.net事件的看法. 一.为什么Control类提供了Invoke和Begin ...
- c# Invoke和BeginInvoke 区别
转自http://www.cnblogs.com/c2303191/articles/826571.html Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线 ...
- c# Invoke和BeginInvoke 区别详解
Control.Invoke 方法 (Delegate):在拥有此控件的基础窗口句柄的线程上执行指定的委托. Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句柄 ...
- C# 多线程修改控件时遇到:创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke
一般在多线程调用UI控件时,涉及到跨线程修改UI,需要使用委托,比如如下: this.Invoke((MethodInvoker)delegate{btnRefresh.Enabled = true; ...
- C#中Invoke 和 BeginInvoke的涵义和区别
BeginInvoke 方法真的是新开一个线程进行异步调用吗? 参考以下代码: public delegate void treeinvoke(); private void UpdateTreeVi ...
- 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)
今天无意中看到有关Invoke和BeginInvoke的一些资料,不太清楚它们之间的区别.所以花了点时间研究了下. 据msdn中介绍,它们最大的区别就是BeginInvoke属于异步执行的. Cont ...
- C#:invoke 与 BeginInvoke使用区别
invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和beg ...
最新文章
- 健身前到底该不该吃东西
- cleaning selected projects has encountered a problem errors occurred during build
- Java字符串与包装类
- java实现儿时的超级玛丽游戏
- 将 iOS 软件移植到 Windows 10 的桥梁将很快打通
- Structs1.0入门知识
- php网页qq客服代码,qq客服代码,网页QQ在线客服代码
- 易康EPS2的使用(一)
- (转)移动端自适应方案
- 手工从grub引导进入Ubuntu16.04
- 关于linux中limits的一些总结
- 数值微分的python实现
- chrome-调试按钮详解
- 步进电机控制器设计 利用Quartus ii9.0设计一个具有四相单四拍
- Delphi创建COM组件并分别用Delphi和html调用该组件的简单实例
- 最干净的U盘启动工具:微PE
- SQL注入-bWAPP靶场-时间盲注
- activiti使用详解
- codeforce 3B lorry (贪心)
- Android 自动亮度