WF4.0 基础篇 (十三) InvokeMethod 调用方法
本节主要介绍InvokeMethod 调用静态方法,实例方法,params参数方法,out参数方法,ref参数方法,范型方法
本文例子下载:
https://files.cnblogs.com/foundation/InvokeMethodWorkflow.rar
本文例子说明
InvokeMethod 调用方法
类名 | System.Activities.Statements.InvokeMethod |
文件 | System.Activities.dll |
结构说明 | 继承 AsyncCodeActivity<TResult> 是一个 sealed类 override 了 [CacheMetadata方法] 与 [BeginExecute方法] 与[EndExecute方法]
[GenericTypeArguments]属性的类型为[Collection<Type>] [MethodName]属性的类型为[string] [Parameters]属性的类型为[Collection<Argument>] [RunAsynchronously]属性的类型为[bool] [TargetObject]属性的类型为[InArgument] [TargetType]属性的类型为[Type] [Result]属性的类型为[OutArgument] |
功能说明 | 1. 可以使用类方式, 对象方式调用方法 2. 可以调用实例方法,静态方法 3. 支持参数数组 4. 支持方法泛型参数 5. 支持out参数,ref 参数 6. 支持等待异步方法调用完成 |
调用静态方法
|
例:
1.定义一个具有静态方法[myMethod]的类[ClassMethod]
2.在工作流中定义三个变量
int型变量p1,默认值为[1],做为[myMethod]方法的第一个参数
int型变量p2,默认值为[2],做为[myMethod]方法的第二个参数
int型变量r,用于接收[myMethod]方法的返回值
3.在流程中添加[InvokeMethod],参数配置见流程
4.在流程中添加[WriteLine],用于打印变量r
ClassMethod | public class ClassMethod { public static int myMethod(int v1, int v2) { return v1 + v2; } } |
工作流 | |
宿主 |
WorkflowInvoker.Invoke(new ClassMethodWorkflow()); |
结果 |
调用实例方法
|
例:
1.定义一个具有静态方法[myMethod]的类[instanceMethod]
2.在工作流中定义三个变量
int型变量p1,默认值为[1],做为[myMethod]方法的第一个参数
int型变量p2,默认值为[2],做为[myMethod]方法的第二个参数
int型变量r,用于接收[myMethod]方法的返回值
3.在流程中添加[InvokeMethod],参数配置见流程
4.在流程中添加[WriteLine],用于打印变量r
instanceMethod | public class instanceMethod { public int myMethod(int v1, int v2) { return v1 - v2; } } |
工作流 | |
宿主 |
WorkflowInvoker.Invoke(new instanceMethodWorkflow()); |
结果 |
调用params参数方法
设置[Parameters] 集合,以指方法的参数
|
例:
1.定义一个具有静态方法[myMethod]的类[paramsMethod]
2.在工作流中定义四个变量
string型变量p1,默认值为[wxd],做为[myMethod]方法params的第一个参数
string型变量p2,默认值为[lzm],做为[myMethod]方法params的第二个参数
string型变量p3,默认值为[lzm],做为[myMethod]方法params的第三个参数
string型变量r,用于接收[myMethod]方法的返回值
3.在流程中添加[InvokeMethod],参数配置见流程
4.在流程中添加[WriteLine],用于打印变量r
paramsMethod | public class paramsMethod { public string myMethod(params string[] list) { string s = ""; for (int i = 0; i < list.Length; i++) { Console.WriteLine(list[i]); s = s + list[i]; } return s; } } |
工作流 | |
宿主 |
WorkflowInvoker.Invoke(new paramsMethodWorkflow()); |
结果 |
调用out参数方法
设置[Parameters] 集合,[Direction] 设为 [Out]
|
例:
1.定义一个具有静态方法[myMethod]的类[outMethod]
2.在工作流中定义二个变量
int型变量p,默认值为[1],做为[myMethod]方法的第一个参数
int型变量o,默认值为[2],用于接收[myMethod]方法的out值
3.在流程中添加[InvokeMethod],参数配置见流程
4.在流程中添加[WriteLine],用于打印变量o
outMethod | public class outMethod { public void myMethod(int v1, out int v2) { v2 = v1 * 10; } } |
工作流 | |
宿主 |
WorkflowInvoker.Invoke(new outMethodWorkflow()); |
结果 |
调用ref参数方法
设置[Parameters] 集合,[Direction] 设为 [In/Out]
|
例:
1.定义一个具有静态方法[myMethod]的类[outMethod]
2.在工作流中定义二个变量
int型变量p,默认值为[2],做为[myMethod]方法的第一个参数
int型变量ro,默认值为[8],用于接收[myMethod]方法的ref值
3.在流程中添加[InvokeMethod],参数配置见流程
4.在流程中添加[WriteLine],用于打印变量ro
outMethod | public class outMethod { public void myMethod(int v1, out int v2) { v2 = v1 * 10; } } |
工作流 | |
宿主 |
WorkflowInvoker.Invoke(new outMethodWorkflow()); |
结果 |
调用范型方法
[InvokeMethod ]可以调用范型方法,设置[GenericTypeArguments]集合,以指定范型方法的范型参数
设置[Parameters] 集合,以指方法的参数
|
例:
1.定义一个具有静态方法[myMethod]的类[genericMethod]
2.在工作流中定义三个变量
int型变量p1,默认值为[10],做为[myMethod]方法的第一个参数
int型变量p2,默认值为[20],做为[myMethod]方法的第二个参数
int型变量r,用于接收[myMethod]方法的返回值
3.在流程中添加[InvokeMethod],参数配置见流程
4.在流程中添加[WriteLine],用于打印变量r
genericMethod | public class genericMethod { public int myGenericMethod<T1, T2>(T1 v1, T2 v2) { int n1 = int.Parse(v1.ToString()); int n2 = int.Parse(v2.ToString()); return n1 +n2; } } |
工作流 | |
宿主 |
WorkflowInvoker.Invoke(new genericMethodWorkflow()); |
结果 |
异步调用方法
这部分内容将在下一节[Delay 与WF4中的线程]中详细讲解