本節主要介紹IF, Switch<T>, While, DoWhile, ForEach<T> 的使用.
本文例子下載:
http://files.cnblogs.com/foundation/controlActivitySample.rar
本文例子說明
控制流Activity
IF 條件
類名 System.Activities.Statements.If 文件 System.Activities.dll 結構說明 繼承 NativeActivity 是一個 sealed類 override 了 [CacheMetadata方法] 與 [Execute方法] [Condition]屬性的類型為[ System.Activities.InArgument<bool> ],可以接受一個結果為[bool]的表達式 [Then] 屬性 的類型為 [System.Activities.Activity] [Else] 屬性 的類型為[System.Activities.Activity] 功能說明 [Then] 屬性 Activity類型,如果[Condition]的表達式結果為[True],執行[Then]否則執行[Else]
例:
1. 在流程中添加string變量[myVariable]
2. 添加[Assign]為變量[myVariable]賦值"wxd"
3. 添加[If],[Condition]的表達式為[ myVariable = "wxd" ]
4. 在[If]的[Then]中添加[WriteLine]打印[ "Then:" + myVariable ]
在[If]的[Else]中添加[WriteLine]打印[ "Else:" + myVariable ]
流程
宿主
WorkflowInvoker.Invoke(new IfWorkflow());
結果
Switch<T> 分支
類名 System.Activities.Statements.Switch<T> 文件 System.Activities.dll 結構說明 繼承 NativeActivity例:
1. 在流程中添加string變量[myVariable]
2. 添加[Assign]為變量[myVariable]賦值"wxwinter"
3. 添加[Switch],[Expression]的表達式類型為[string],內容為[ myVariable]
4. 在[Default]中添加[WriteLine]打印["Case Default :" + myVariable ]
添加[case],值為"wxd",在新添加的[case] 中添加[WriteLine]打印["Case wxd :" + myVariable]
添加[case],值為"lzm",在新添加的[case] 中添加[WriteLine]打印["Case lzm :" + myVariable]
流程
宿主
WorkflowInvoker.Invoke(new SwitchWorkflow());
結果
While 循環
類名
System.Activities.Statements.While
文件
System.Activities.dll
結構說明
繼承 NativeActivity
是一個 sealed類
override 了 [CacheMetadata方法] 與 [Execute方法]
[Variables] 屬 性 的類型為[Collection<Variable>]
[Condition]屬性 的類型為[Activity<bool>],可以接受一個結果為[bool]的表達 式
[Body] 屬性 的類型為[System.Activities.Activity]
功能說明
[While]中可以定義變量
當[Condition]條件為真時會執行[Body]中的內容
例:
1. 在流程中添加int變量[myVariable]
2. 添加[While],[Condition]的表達式為[myVariable<=10]
3. 在[While]的[Body]中添加[Assign],為變量[myVariable]賦值為 [myVariable + 1]
添加[WriteLine]打印變量[myVariable]的值
流程
宿主
WorkflowInvoker.Invoke(new WhileWorkflow());
結果
DoWhile 循環
類名
System.Activities.Statements.DoWhile
文件
System.Activities.dll
結構說明
繼承 NativeActivity
是一個 sealed類
override 了 [CacheMetadata方法] 與 [Execute方法]
[Variables] 屬 性 的類型為[Collection<Variable>]
[Condition]屬性 的類型為[Activity<bool>],可以接受一個結果為[bool]的表達 式
[Body] 屬性 的類型為[System.Activities.Activity]
功能說明
[DoWhile]中可以定義變量
當[Condition]條件為真時會執行[Body]中的內容, 當[Condition]條件為假時會執行[Body]中 的內容一次
例:
1. 添加[DoWhile],[Condition]的表達式為[False]
2. 在[DoWhile]的[Body] 添加[WriteLine]打印"wxwinter"
流程 宿主 WorkflowInvoker.Invoke(new DoWhileWorkflow()); 結果
ForEach<T> 循環
類名 System.Activities.Statements.ForEach<T> 文件 System.Activities.dll 結構說明 繼承 NativeActivity例:
1. 創建一code activity 名為[CollectionActivity],
具有[Out]參數,類型為List<string>的參數[myOutCollection]
2. 在流程中添加List<string>變量[myCollection]
3. 在流程中添加[CollectionActivity],將[CollectionActivity.myOutCollection]參數綁定到 [myCollection] 變量
4. 在流程中添加[ForEach<T>],[TypeArgument]屬性指定[string]
[Values] 屬性綁定到 [myCollection] 變量
在[Body]中添加[writeLine],打印[item]
CollectionActivity
public sealed class CollectionActivity : CodeActivity
{
public OutArgument<System.Collections.Generic.List<string>> myOutCollection { get; set; }
protected override void Execute(CodeActivityContext context)
{
System.Collections.Generic.List<string> list = new List<string>();
list.Add("wxd");
list.Add("lzm");
list.Add("wxwinter");
context.SetValue (this.myOutCollection,list );
}
}
流程
宿主
WorkflowInvoker.Invoke(new ForEachWorkflow());
結果