1. 程式人生 > >WF4.0 基礎篇 (十三) InvokeMethod 呼叫方法

WF4.0 基礎篇 (十三) InvokeMethod 呼叫方法

本節主要介紹InvokeMethod 呼叫靜態方法,例項方法,params引數方法,out引數方法,ref引數方法,範型方法

本文例子下載:

http://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中的執行緒]中詳細講解