我们可以将BeginInvoke和EndInvoke视为将异步函数分割为两部分的特殊函数。BeginInvoke通过自己的两个参数值(一个AsyncCallBack委托,一个object对象)来接收传入参数,EndInvoke用于计算传出参数(标记了out或者ref的参数)和函数返回值。
现在我们回到自己的函数FuncWithParameters,param1、param2、param3是传入值,同时,它们也作为BeginInvoke的参数来处理;函数的返回值是string类型,它将作为EndInvoke的返回类型。比较酷的是,编译器可以通过委托类型,来自动为BeginInvoke和EndInvoke生成正确的参数与返回值类型。
注意我们在异步函数中为参数分配了新的值,这样可以检验这些参数在调用异步函数后,究竟会传出什么样的值……

我们的异步函数对参数的改变并没有影响其传出值,现在我们把ArrayList变为ref参数,看看会给EndInvoke带来什么变化。

param2没有变化,因为它是输入参数;param1作为输出参数,被更新为300;ArrayList的值已被重新分配,我们可以发现它的引用被指向了一个空元素的ArrayList对象(初始引用已丢失)。通过以上实例,我们应该能理解参数是如何在BeginInvoke与EndInvoke之间传递的。现在我们来尝试完成一个非阻塞模式下的异步调用,这是个重头戏!
见第二篇:谈.Net委托与线程——创建无阻塞的异步调用(二)
posted @
以上就是关于methodinvoker的全部内容,相信你一定会非常满意。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-21102-3.html
改变了历史哦
公关了
应该是他儿子去和人
要赶上现有成熟体系的战力还需要时间