添加程序上的元素
WF 4.0
提供了大量的程序元素,例如活动
If
、
While
、
Assign
、
Sequence
等等。下面举一个时钟的例子来说明程序元素的用法。打开
Workflow1.xaml
文件。
使用
Variables
(变量)
在
WF 4.0
中,你必须定义工作流活动元素所用到的所有
variable
(变量)。你将需要两个
variables
:一个用来指定在什么时候报时,另一个用来需要报多少下铃。点击
Variables
按钮,如果
Variables
的窗口如
Figure1-3
所示(在这种情况下是不能添加
variable
的),它的意思是
variable
没有默认的范围。
点击设计器中的
Sequence
活动,这时
Variables
窗口就会变成如
Figure1-7
所示。
点击
Create Variable
链接。输入
name
为
counter
,选择
Variable type
(变量类型)为
Int32
,
Scope
(范围)这时默认为
Sequence
,你可以不去修改它,当然你也可以按你的需求去修改它。
Scope
为
Sequence
表示这个
Variable
可以在这个
Sequence
和
Sequence
的子活动中都有效。输入
Default
(默认值)值为
1
。这时
Variables
窗口应该如图
Figure1-8
所示。
Properties
(属性)窗口同样有这样的功能(如图
Figure1-9
),你可以在
Properties
窗口或者在
Variables
窗口中输入
variable
的属性。
再次点击
Create Variable
链接。这次你尝试使用
Properties
窗口来输入属性。输入
name
为
numberBells
,类型为
Int32
,保留
Scope
为
Sequence
。点击
Default
属性后面的省略号,弹出
Expression Editor
对话框,如图
Figure1-10
所示。
提示:你可能注意到
WF 4.0
中用到很多
expression
(表达式)。很多的属性都使用到表达式,但是,属性的输入框往往比较小,没有足够的空间来书写复杂的表达式。为解决这个问题,
VS2010
提供了
expression editor
(表达式输入框),我们只需要点击属性框后面的省略号就能弹出表达式输入框让我们来输入。表达式可以是
variables
(变量)、
arguments
(参数)和系统函数,就好像你在代码中使用一样。
在
Default
属性的表达式输入框中输入表达式
DateAndTime.Now.Hour
。这会把现在的
hour(
小时数
)
赋值给
numberBells
变量。
Variables
窗口这时应该如图
Figure1-11
所示。
If
活动
类
DateAndTime
的成员
Hour
是根据
24
小时返回小时数的。例如,
2PM
,它会返回
14
。因此你需要调整它,因为你需要在时钟到达
2
的时候响铃,而不是
14
。在代码中,你可以这样写:
If (numberBells > 12)
numberBells -= 12;
但是,在
WF 4.0
中,你需要使用
If
和
Assign
活动来完成它。拖拉一个
If
活动到
Hello
活动的下面。这时设计器应该如图
Figure1-12
。
提示:注意到图形中的红色错误圆圈。如果你把鼠标移到它们上面,它会提示你相关的错误。在
If
活动上的错误是你没有指定条件属性。在
Sequence
活动上的错误是它的一个或多个子活动有错。
在属性窗口,改变
DisplayName
为
Adjust for PM
。
If
活动由三个元素组成。
Condition
(条件)指定了需要验证的逻辑,它应该是一个
Boolean
类型。
Then
元素是当
Condition
条件为
TRUE
时执行,而
Else
元素是
Condition
为
Fault
时执行。你不必同时指定
Then
和
Else
,只要其中一个有值就行。如果没有定义活动,那么也没有活动会被执行。输入
Condition
为
numberBells>12
。
Assign
活动
拖拉一个
Assign
活动到
Then
容器。
Assign
活动允许你把一个值赋值给一个
variable
(变量)或者赋值给一个
argument
(参数)。这个活动图示如
Figure1-13
。
To
和
Value
属性都是接受一个表达式。你可以直接输入一个表达式到属性框中或者点击省略号,在表达式编辑框中输入表达式。在
To
属性中输入
numberBells
。在
Value
中输入
numberBells-12
。这时属性框如图
Figure1-14
所示。
很多的活动都是容器活动,意思是他们可以包含其他的活动。
If
活动就是一个好例子。
While
活动
现在你添加一个
While
活动来响铃。在“
Adjust for PM
”的下面拖放一个
While
活动。修改
DisplayName
为
Sound Bells
。如图
Figure1-15
所示。
在
While
活动中,
Body
中的活动是在条件为真的时候执行,首先
Condition
(条件)被验证,如果为真,则执行
Body
中的活动,活动会一直执行下去直到条件为假。
提示:
DoWhile
活动跟
While
活动类似,但
DoWhile
活动是先执行
Body
中的活动,然后才判断
Conditon
中的条件,这样就确保了
Body
中的活动至少会被执行一次。而
While
活动则是首先判断
Condition
的条件,如果为假,则
Body
中的活动是不会被执行的。
在
Condition
中输入
counter<=numberBells
。拖拉一个
Sequence
活动到
Body
容器中,设置
Sequence
的
DisplayName
为
Sound Bell
。这时图示如
Figure1-16
。
Sequence
活动
拖放三个活动到“
Sound Bell
”
Sequence
中。在这个练习中,我们不会真的去响铃。而是我们输出一行文本来代表响铃。拖放一个
WriteLine
活动到“
Sound Bell
”活动中。在
Text
属性中输入
这会显示当前
counter
的值。拖放一个
Assign
活动在
WriteLine
活动的下面。设置
To
属性为
counter
,
Value
属性为
counter+1
。用来不断递增
counter
。
Delay
活动
最后,拖放一个
Delay
活动在
Assign
活动的下面。
Delay
活动可以让工作流在一段指定的时间内停止。
Delay
的属性只有
Duration
,它指定了需要停止多久。这需要指定为一个
TimeSpan
类。输入一下代码:
现在的图示应该为
Figure1-17
所示。
更多的装饰
点击在“
Sound Bells
”
While
活动右上角的收缩按钮。工作流的图形会变成如图
Figure1-18
所示。
拖放一个
WriteLine
活动到“
Sound Bells
”活动的下面。修改
DisplayName
为
DisplayTime
;在
Text
属性中输入一下表达式:
拖拉一个
If
活动在“
Display Time
”的下面,设置
DisplayName
为
Greeting
。在
Condition
属性中输入:
在
Then
和
Else
容器中分别拖放一个
WriteLine
。在
Then
容器中的
WriteLine
的
text
为“
Good Evening
”;在
Else
容器中的
WriteLine
中的
Text
输入“
Good Day
”。“
Greeting
”活动应该如图
Figure1-19
所示。
运行程序
点击
F5
运行程序。根据时间的不同,运行的结果会与下面的类似:
原文地址:http://www.cnblogs.com/kukafeiso/archive/2010/06/12/1757008.html
感谢[苦-咖啡]的分享,让大家一起学习进步。
转载于:https://www.cnblogs.com/Tim_Liu/archive/2010/10/18/1854470.html