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. 支援等待非同步方法呼叫完成 |
呼叫靜態方法
|
例:
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中的執行緒]中詳細講解