WF 中的活动创作选项

.NET Framework 4.6.1 提供了多个用于创建自定义活动的选项。 用于创作给定活动的正确方法取决于需要哪些运行时功能。

确定用于创作自定义活动的基活动类

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

基活动类 可用的功能
Activity 将系统提供的和自定义活动的组组合到复合活动中。
CodeActivity 通过提供 Execute 可重写的方法来实现命令性功能。 还提供对跟踪、变量和参数的访问权限。
NativeActivity 提供所有功能 CodeActivity,以及中止活动执行、取消子活动执行、使用书签以及计划活动、活动作和函数的功能。
DynamicActivity 提供类似于 DOM 的方法,用于构建与 WF 设计器和运行时机制 ICustomTypeDescriptor进行交互的活动,从而允许在不定义新类型的情况下创建新活动。

使用活动创作活动

通过组合其他现有活动从 Activity 撰写功能派生的活动。 这些活动可以是 .NET Framework 4.6.1 活动库中的现有自定义活动和活动。 组装这些活动是创建自定义功能的最基本方法。 使用可视化设计环境创作工作流时,通常采用此方法。

使用 CodeActivity 或 AsyncCodeActivity 创作活动

CodeActivity 生或 AsyncCodeActivity 可以通过使用自定义命令性代码替代 Execute 方法来实现命令性功能的活动。 当活动由运行时执行时,将执行自定义代码。 虽然以这种方式创建的活动有权访问自定义功能,但它们无权访问运行时的所有功能,例如完全访问执行环境、计划子活动、书签创建或对 Cancel 或 Abort 方法的支持。 CodeActivity执行时,它有权访问减少的执行环境版本(通过CodeActivityContextAsyncCodeActivityContext类)。 使用创建 CodeActivity 的活动有权访问参数和变量解析、扩展和跟踪。 异步活动计划可以使用 AsyncCodeActivity

使用 NativeActivity 创作活动

派生自NativeActivity的活动(如派生CodeActivity自的活动)通过重写Execute来创建命令性功能,但也可通过传递到Execute方法访问工作流运行时NativeActivityContext的所有功能。 此上下文支持计划和取消子活动、执行 ActivityActionActivityFunc<TResult> 对象、将事务流入工作流、调用异步进程、取消和中止执行、访问执行属性和扩展以及书签(恢复暂停工作流的句柄)。

使用 DynamicActivity 创作活动

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

创作返回结果的活动

许多活动在执行后必须返回结果。 尽管始终可以为此对活动定义自定义OutArgument<T>,但建议改为使用Activity<TResult>或派生自或NativeActivity<TResult>CodeActivity<TResult>生。 每个基类都有一个 OutArgument<T> 命名的 Result,活动可用于其返回值。 仅当仅需要从活动返回一个结果时,才应使用返回结果的活动;如果需要返回多个结果,则应改用单独的 OutArgument<T> 成员。