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. 支持等待异步方法调用完成

 

 

 

调用静态方法

 

  • TargetType 属性 : 方法的类名(浏览方式),不能与TargetObject共存
  • MethotName 属性 : 方法名 (字串方式)
  • Parameters 属性 : 方法的参数,按方法参数顺序,可以绑定到流程的参数上
  • Result 属性 : 方法的返回值,可以绑定到流程的参数上

 

例:

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());

结果

 

调用实例方法

 

  • TargetObject 属性 : 对象名,绑定到流程的参数上(浏览方式),不能与TargetType共存
  • MethotName 属性 : 方法名 (字串方式)
  • Parameters 属性 : 方法的参数,按方法参数顺序,可以绑定到流程的参数上
  • Result 属性 : 方法的返回值,可以绑定到流程的参数上

 

例:

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] 集合,以指方法的参数

 

 

  • TargetObject 属性 : 对象名,绑定到流程的参数上(浏览方式),不能与TargetType共存
  • MethotName 属性 : 方法名 (字串方式)
  • Parameters 属性 : 方法的参数,按方法参数顺序,可以绑定到流程的参数上
  • Result 属性 : 方法的返回值,可以绑定到流程的参数上

 

例:

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]

 

 

  • TargetObject 属性 : 对象名,绑定到流程的参数上(浏览方式),不能与TargetType共存
  • MethotName 属性 : 方法名 (字串方式)
  • Parameters 属性 : 方法的参数,按方法参数顺序,可以绑定到流程的参数上
  • Result 属性 : 方法的返回值,可以绑定到流程的参数上

 

例:

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]

 

 

  • TargetObject 属性 : 对象名,绑定到流程的参数上(浏览方式),不能与TargetType共存
  • MethotName 属性 : 方法名 (字串方式)
  • Parameters 属性 : 方法的参数,按方法参数顺序,可以绑定到流程的参数上
  • Result 属性 : 方法的返回值,可以绑定到流程的参数上

 

例:

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] 集合,以指方法的参数

 

 

  • TargetObject 属性 : 对象名,绑定到流程的参数上(浏览方式),不能与TargetType共存
  • MethotName 属性 : 方法名 (字串方式)
  • Parameters 属性 : 方法的参数,按方法参数顺序,可以绑定到流程的参数上
  • Result 属性 : 方法的返回值,可以绑定到流程的参数上
  • GenericTypeArguments 集合:以指定范型方法的范型参数

 

例:

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中的线程]中详细讲解

 

 

posted @ 2009-12-17 18:15  WXWinter(冬)  阅读(10628)  评论(19编辑  收藏  举报