WF4.0 基础篇 (八) 控制流Activity
2009-11-28 08:59
295 查看
本节主要介绍IF, Switch<T>, While, DoWhile, ForEach<T> 的使用.
本文例子下载:
http://files.cnblogs.com/foundation/controlActivitySample.rar
本文例子说明
![](http://images.cnblogs.com/cnblogs_com/foundation/112809_0058_WF401.png)
控制流Activity
IF 条件
![](http://images.cnblogs.com/cnblogs_com/foundation/112809_0058_WF402.png)
例:
1. 在流程中添加string变量[myVariable]
2. 添加[Assign]为变量[myVariable]赋值"wxd"
3. 添加[If],[Condition]的表达式为[ myVariable = "wxd" ]
4. 在[If]的[Then]中添加[WriteLine]打印[ "Then:" + myVariable ]
在[If]的[Else]中添加[WriteLine]打印[ "Else:" + myVariable ]
Switch<T> 分支
![](http://images.cnblogs.com/cnblogs_com/foundation/112809_0058_WF406.png)
例:
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]
While 循环
![](http://images.cnblogs.com/cnblogs_com/foundation/112809_0058_WF409.png)
例:
1. 在流程中添加int变量[myVariable]
2. 添加[While],[Condition]的表达式为[myVariable<=10]
3. 在[While]的[Body]中添加[Assign],为变量[myVariable]赋值为 [myVariable + 1]
添加[WriteLine]打印变量[myVariable]的值
DoWhile 循环
![](http://images.cnblogs.com/cnblogs_com/foundation/112809_0058_WF4012.png)
例:
1. 添加[DoWhile],[Condition]的表达式为[False]
2. 在[DoWhile]的[Body] 添加[WriteLine]打印"wxwinter"
ForEach<T> 循环
![](http://images.cnblogs.com/cnblogs_com/foundation/112809_0058_WF4016.png)
例:
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]
本文例子下载:
http://files.cnblogs.com/foundation/controlActivitySample.rar
本文例子说明
![](http://images.cnblogs.com/cnblogs_com/foundation/112809_0058_WF401.png)
控制流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] |
![](http://images.cnblogs.com/cnblogs_com/foundation/112809_0058_WF402.png)
例:
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 是一个 sealed类 override 了 [CacheMetadata方法] 与 [Execute方法] [Expression]属性的类型为[System.Activities.InArgument<T>],是case的 表达式 [Default] 属性 的类型为[System.Activities.Activity] [Cases] 属性 的类型为[IDictionary<T, Activity>] |
功能说明 | 在添加[Switch<T>]时,需要为case 表达式 [Expression属性] 指定类型![]() [Switch]会比效[Expression]的值与[Case集合]中每个分支值,如果有相等的就执行该分支,如果没的相等的就执行[Default] [Switch]会自动检查[Case集合]中是否有相同的分支条件 |
![](http://images.cnblogs.com/cnblogs_com/foundation/112809_0058_WF406.png)
例:
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]中的内容 |
![](http://images.cnblogs.com/cnblogs_com/foundation/112809_0058_WF409.png)
例:
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]中的内容一次 |
![](http://images.cnblogs.com/cnblogs_com/foundation/112809_0058_WF4012.png)
例:
1. 添加[DoWhile],[Condition]的表达式为[False]
2. 在[DoWhile]的[Body] 添加[WriteLine]打印"wxwinter"
流程 | ![]() |
宿主 | WorkflowInvoker.Invoke(new DoWhileWorkflow()); |
结果 | ![]() |
ForEach<T> 循环
类名 | System.Activities.Statements.ForEach<T> |
文件 | System.Activities.dll |
结构说明 | 继承 NativeActivity 是一个 sealed类 override 了 [CacheMetadata方法] 与 [Execute方法] [Body] 属性 的类型为[ActivityAction<T>] [Values] 属性 的类型为[ InArgument<IEnumerable<T>> ] |
功能说明 | [Values] 属性为要循环的集合 [TypeArgument] 为要循环集合的的类型 [item]为循环时的临时变量,可在[Body]中被访问 ![]() |
![](http://images.cnblogs.com/cnblogs_com/foundation/112809_0058_WF4016.png)
例:
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()); |
结果 | ![]() |
相关文章推荐
- WF4.0 基础篇 (五) 数据的传递 Variable变量
- WF4.0 基础篇 (十五) TransactionScope 事物容器
- WF4.0 基础篇 (二十) ActivityWithResult 有返回值Activity
- WF4.0 基础篇 (八) 控制流Activity
- WF4.0 基础篇 (十一) Excetpion 异常 与 TerminateWorkflow 结束流程
- WF4.0 基础篇 (十八) Flowchart
- WF4.0 基础篇 (二十五) ActivityAction 与 InvokeAction
- WF4.0 基础篇 (二十六) Interop调用WF3.X的Activity
- PHP面试解读 - PHP基础篇 - 会话控制技术
- php学习基础篇之基础函数(数学 日期 字符串)、php循环流程控制
- WF4.0 基础篇 (一)开始使用WF
- PL/SQL--基础篇2循环控制
- C++---基础篇(运算符/表达式/控制语句)
- 黑马程序员---Java基础篇之流程控制语句及控制跳转语句
- WF4.0 基础篇 (十) Collection 集合操作
- WF4.0 基础篇 (十六) CompensableActivity 补偿
- WF4.0 基础篇 (十九) Persistence 持久化
- [WF4.0 实战] WPF + WCF + WF 打造Hello World(基础篇)
- WF4.0 基础篇 (二十一) WorkflowInvoker
- WF4.0 基础篇 (十二) CancellationScope 取消容器