WF 中的活动创作选项

本主题适用于 Windows Workflow Foundation 4。

.NET Framework 版本 4提供了若干用于创建自定义活动的选项。用于创作给定活动的正确方法取决于所需的运行时功能。

确定哪个基本活动类用于创作自定义活动

下表列出了自定义活动基类中可用的功能。

基本活动类 可用的功能

Activity

将一组系统提供的活动和一组自定义活动组成一个复合活动。

CodeActivity

通过提供可以重写的 Execute 方法实现命令性功能。还提供对跟踪、变量以及参数的访问。

NativeActivity

提供 CodeActivity 的所有功能,另外还可中止活动执行、取消子活动执行、使用书签以及计划活动、活动操作和功能。

DynamicActivity

提供一个类似于 DOM 的方法,使用该方法可以构造通过 IcustomTypeDescriptor 与 WF 设计器和运行时系统交互的活动,从而允许在不定义新类型的情况下创建新活动。

使用 Activity 创作活动

Activity 派生的活动通过组合其他现有活动来构成功能。这些活动可以是现有的自定义活动,也可以是来自 .NET Framework 版本 4活动库的活动。组合这些活动是创建自定义功能的最基本方法。使用可视化设计环境创作工作流时这种方法最常用。

使用 CodeActivity 创作活动

CodeActivity 派生的活动可以通过用自定义的命令性代码重写 Execute 方法来实现命令性功能。活动由运行时执行时将执行该自定义代码。尽管使用这种方法创建的活动可以访问自定义功能,但是它们无法访问运行时的所有功能,如对执行环境的完全访问或对 Cancel 或 Abort 方法的支持。执行 CodeActivity 时,它可以访问简化版本的执行环境(通过 CodeActivityContext 类)。使用 CodeActivity 创建的活动可以访问参数和变量解析、扩展以及跟踪。可以使用 AsyncCodeActivity 进行异步活动计划。

使用 NativeActivity 创作活动

NativeActivity 派生的活动,与从 CodeActivity 派生的活动一样,可通过重写 Execute 来创建命令性功能,除此之外还可以通过传递给 Execute 方法的 NativeActivityContext 访问工作流运行时的所有功能。此上下文支持安排和取消子活动、执行 ActivityAction 和 ActivityFunc 对象、取消和中止执行、访问执行属性和扩展以及书签(用于继续已暂停工作流的句柄)。

使用 DynamicActivity 创作活动

与其他三种活动类型不同,不会通过从 DynamicActivity(该类是密封的)派生新类型来创建新功能,而是通过使用活动文档对象模型 (DOM) 将功能组合到 PropertiesImplementation 属性中。

创作返回结果的活动

很多活动必须在其执行之后返回结果。尽管可以在活动上始终定义一个自定义 OutArgument 来实现此目的,但是建议改用 Activity 或者从 CodeActivityNativeActivity 派生。这些基类中的每个类都具有一个名为 Result 的 OutArgument,您的活动可以使用它作为其返回值。