现在的位置: 首页 > 综合 > 正文

WF4.0 基础篇 (八) 控制流Activity

2014年04月05日 ⁄ 综合 ⁄ 共 3675字 ⁄ 字号 评论关闭

本节主要介绍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

是一个 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集合]中是否有相同的分支条件


 

例:

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

是一个 sealed类

override 了 [CacheMetadata方法] 与 [Execute方法]

[Body] 属性 的类型为[ActivityAction<T>]

[Values] 属性 的类型为[ InArgument<IEnumerable<T>> ]

功能说明

[Values] 属性为要循环的集合

[TypeArgument] 为要循环集合的的类型

[item]为循环时的临时变量,可在[Body]中被访问

 


 

例:

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

结果

抱歉!评论已关闭.