在工作流设计器中定义和使用活动委托

.NET Framework 4.5 包括用于 InvokeDelegate 活动的现成可用的设计器。 此设计器可用于将委托分配给从 ActivityDelegate 派生的活动,例如 ActivityActionActivityFunc<TResult>

定义活动委托

  1. 创建新的“工作流控制台应用程序”项目。

    注意

    如果不想查看“工作流”项目模板,请首先安装 Visual Studio 的 Windows Workflow Foundation 组件。 有关详细说明,请参阅安装 Windows Workflow Foundation

  2. 在“解决方案资源管理器”中右键单击该项目,然后选择“添加”>“新建项”。 选择“工作流”类别,然后选择“活动”项模板。 将新活动命名为 MyForEach.xaml,然后选择“确定”。

    活动将在工作流设计器中打开。

  3. 在工作流设计器中,单击“参数”选项卡。

  4. 单击“创建参数”。 将新参数命名为 Items。

  5. 在“参数类型”列中,选择“[T] 数组”。

  6. 在类型浏览器中,选择“对象”,然后选择“确定”。

  7. 再次单击“创建参数”。 将新参数命名为 Body。 在新参数的“方向”列中,选择“属性”。

  8. 在“参数类型”列中,选择“浏览类型”

  9. 在类型浏览器中,在“类型名称”字段中输入 ActivityAction。 在树视图中选择“ActivityAction<T>”。 在显示的下拉列表中选择“对象”,将类型 ActivityAction<Object> 分配给参数。

  10. While 活动从工具箱的“控制流”部分拖放到设计器图面中。

  11. 选择 While 活动,然后选择“变量”选项卡。

  12. 选择“创建变量”。 将新变量命名为 Index。

  13. 在“变量类型”列中,选择“Int32”。 将“范围”保留为“While”,将“默认值”列保留为空。

  14. While 活动的“条件”属性设置为“index < Items.Length;”。

  15. InvokeDelegate 活动从工具箱的“基元”部分拖放到 While 活动的“正文”。

  16. 在委托下拉列表中选择“正文”。

  17. InvokeDelegate 活动的“属性”网格中,单击“委托参数”属性中的“…”按钮。

  18. 在命名为“Argument”的参数的“值”列中,输入 Items[Index]。 单击“确定”以关闭“DelegateArguments”对话框。

  19. Assign 活动拖到 InvokeDelegate 活动的水平线下。 将创建 Assign 活动,并且将自动创建 Sequence 活动以包含 MyForEach 活动的“正文”部分中的两个活动。 需要序列,因为“正文”部分只能包含一个活动。 自动创建新的 Sequence 活动是 .NET Framework 4.5 的一个新功能。

  20. Assign 活动的“到”属性设置为“index”。 将“Assign”活动的“值”属性设置为“index+1”。

    自定义 MyForEach 活动为通过 Items 集合(集合中的值作为活动的输入)传递给它的每个值调用一次任意活动。

使用工作流中的自定义活动

  1. 按 Ctrl+Shift+B 生成项目。

  2. 在“解决方案资源管理器”中,打开设计器中的“Workflow1.xaml”。

  3. 将“MyForEach”活动从工具箱拖到设计器图面。 该活动位于工具箱的某个部分,其名称与项目名称相同。

  4. 将 MyForEach 活动的“项”属性设置为“new Object[] {1, "abc"}”。

  5. WriteLine 活动从工具箱的“基元”部分拖放到 MyForEach 活动的“Delegate:Body”部分。

  6. WriteLine 活动的“文本”属性设置为“Argument.ToString()”。

当执行工作流时,控制台将显示以下输出:

1abc