Welcome

首页 / 软件开发 / C# / 工作流编程循序渐进(5:状态机工作流)

工作流编程循序渐进(5:状态机工作流)2010-03-04 51cto 朱先忠一、状态机工作流简介

状态机工作流由一组状态组成。一个状态被指示为初始状态。每个状态都可以接收一组特定事件。视事件而定,可以转换到另一个状态。状态机工作流可以有最终状态。当转换到最终状态时,工作流将完成。

[一]状态机设计器视图

状态机设计器是一种自由形式的设计器,这意味着可以在设计图面上自由移动活动。

状态机设计器有两个视图:
(1)“状态”视图(2)“事件驱动”视图

状态视图显示状态活动和可包含在状态活动内的事件驱动的活动。在此视图中,从一个状态到另一个状态的转换是由直线表示的,这些直线从一个状态中的事件驱动活动延伸到另一个状态。

也可以通过自己绘制直线来创建一个状态活动到另一个状态活动的转换。若要绘制转换,请你选择事件驱动的活动,然后选择活动上的某个手柄并拖动该手柄。此操作将绘制直线。此直线随后将连接到目标状态,指示状态之间的转换。如下图所示:

拖动上图状态活动内部的事件驱动活动的手柄,拖动到下面的状态活动上即可,得到如下图所示的结果:

若要访问事件驱动的视图,请双击事件驱动的活动。出现的设计器与顺序工作流设计器很像。在设计器的顶部,导航栏显示直到所显示事件驱动活动为止的活动层次结构。可以通过单击显示的层次结构中的任意元素导航回状态视图。如果已在状态视图中绘制了从一个状态到另一个状态的转换,并且正在显示该活动的事件驱动视图,则会为您将一个已设置状态活动添加到事件驱动的活动。如果更改已设置状态活动的属性,它将反映到状态视图中。

[二]状态机工作流活动

下表描述了状态机工作流设计器中使用的关键活动。

工具箱名称活动说明
StateStateActivity表示状态机中的一个状态;可能包含其他 StateActivity 活动。有关更多信息,请参见 使用 StateActivity 活动(可能为英文网页)。
SetStateSetStateActivity指定到新状态的转换。有关更多信息,请参见 使用 SetStateActivity 活动(可能为英文网页)。
StateInitializationStateInitializationActivity在进入某个状态时执行;可能包含其他活动。有关更多信息,请参见 使用 StateInitialization 活动(可能为英文网页)。
StateFinalizationStateFinalizationActivity在离开 StateActivity 活动时执行包含的活动。有关更多信息,请参见 使用 StateFinalizationActivity 活动(可能为英文网页)。
EventDrivenEventDrivenActivity用于依赖于外部事件开始执行的状态。EventDrivenActivity 活动必须具有实现 IEventActivity 接口作为第一个子活动的活动。有关更多信息,请参见 使用 EventDrivenActivity 活动(可能为英文网页)。