转载:Beginning WF 4.0翻译——第一章(创建一个简单的工作流)续一 - Go语言中文社区

转载:Beginning WF 4.0翻译——第一章(创建一个简单的工作流)续一


添加程序上的元素

WF 4.0提供了大量的程序元素,例如活动IfWhileAssignSequence等等。下面举一个时钟的例子来说明程序元素的用法。打开Workflow1.xaml文件。

 

使用Variables(变量)

WF 4.0中,你必须定义工作流活动元素所用到的所有variable(变量)。你将需要两个variables:一个用来指定在什么时候报时,另一个用来需要报多少下铃。点击Variables按钮,如果Variables的窗口如Figure1-3所示(在这种情况下是不能添加variable的),它的意思是variable没有默认的范围。

点击设计器中的Sequence活动,这时Variables窗口就会变成如Figure1-7所示。

 

点击Create Variable链接。输入namecounter,选择Variable type(变量类型)为Int32Scope(范围)这时默认为Sequence,你可以不去修改它,当然你也可以按你的需求去修改它。ScopeSequence表示这个Variable可以在这个SequenceSequence的子活动中都有效。输入Default(默认值)值为1。这时Variables窗口应该如图Figure1-8所示。

 

Properties(属性)窗口同样有这样的功能(如图Figure1-9),你可以在Properties窗口或者在Variables窗口中输入variable的属性。

 

再次点击Create Variable链接。这次你尝试使用Properties窗口来输入属性。输入namenumberBells,类型为Int32,保留ScopeSequence。点击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中,你需要使用IfAssign活动来完成它。拖拉一个If活动到Hello活动的下面。这时设计器应该如图Figure1-12

 

 

 

 

提示:注意到图形中的红色错误圆圈。如果你把鼠标移到它们上面,它会提示你相关的错误。在If活动上的错误是你没有指定条件属性。在Sequence活动上的错误是它的一个或多个子活动有错。

 

 

在属性窗口,改变DisplayNameAdjust for PMIf活动由三个元素组成。Condition(条件)指定了需要验证的逻辑,它应该是一个Boolean类型。Then元素是当Condition条件为TRUE时执行,而Else元素是ConditionFault时执行。你不必同时指定ThenElse,只要其中一个有值就行。如果没有定义活动,那么也没有活动会被执行。输入ConditionnumberBells>12

 

Assign活动

拖拉一个Assign活动到Then容器。Assign活动允许你把一个值赋值给一个variable(变量)或者赋值给一个argument(参数)。这个活动图示如Figure1-13

 

ToValue属性都是接受一个表达式。你可以直接输入一个表达式到属性框中或者点击省略号,在表达式编辑框中输入表达式。在To属性中输入numberBells。在Value中输入numberBells-12。这时属性框如图Figure1-14所示。

 

很多的活动都是容器活动,意思是他们可以包含其他的活动。If活动就是一个好例子。

 

While活动

现在你添加一个While活动来响铃。在“Adjust for PM”的下面拖放一个While活动。修改DisplayNameSound Bells。如图Figure1-15所示。

 

While活动中,Body中的活动是在条件为真的时候执行,首先Condition(条件)被验证,如果为真,则执行Body中的活动,活动会一直执行下去直到条件为假。

 

 

提示:DoWhile活动跟While活动类似,但DoWhile活动是先执行Body中的活动,然后才判断Conditon中的条件,这样就确保了Body中的活动至少会被执行一次。而While活动则是首先判断Condition的条件,如果为假,则Body中的活动是不会被执行的。

 

Condition中输入counter<=numberBells。拖拉一个Sequence活动到Body容器中,设置SequenceDisplayNameSound Bell。这时图示如Figure1-16

 

 

 

Sequence活动

拖放三个活动到“Sound BellSequence中。在这个练习中,我们不会真的去响铃。而是我们输出一行文本来代表响铃。拖放一个WriteLine活动到“Sound Bell”活动中。在Text属性中输入

 

这会显示当前counter的值。拖放一个Assign活动在WriteLine活动的下面。设置To属性为counterValue属性为counter+1。用来不断递增counter

 

Delay活动

最后,拖放一个Delay活动在Assign活动的下面。Delay活动可以让工作流在一段指定的时间内停止。Delay的属性只有Duration,它指定了需要停止多久。这需要指定为一个TimeSpan类。输入一下代码:

 

现在的图示应该为Figure1-17所示。

 

 

 

更多的装饰

点击在“Sound BellsWhile活动右上角的收缩按钮。工作流的图形会变成如图Figure1-18所示。

 

拖放一个WriteLine活动到“Sound Bells”活动的下面。修改DisplayNameDisplayTime;在Text属性中输入一下表达式:

 

拖拉一个If活动在“Display Time”的下面,设置DisplayNameGreeting。在Condition属性中输入:

 

ThenElse容器中分别拖放一个WriteLine。在Then容器中的WriteLinetext为“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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_33714884/article/details/94724507
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-30 13:43:28
  • 阅读 ( 938 )
  • 分类:Go Web框架

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢