毛毛的小窝 — 关注技术交流、让我们一起成长

导航

WF学习系列之四:顺序工作流控制台应用程序模板介绍

简介

WF兼有很多角色,如编程模型、运行时引擎以及工具集等,它使我们很容易创建基于工作流的应用。这里主要分析一下VS2008下顺序工作流控制台应用程序的模板,并了解几个常见的活动。

顺序工作流控制台应用程序模板

WF提供两种类型的工作流:顺序工作流、状态机工作流。这两个工作流分别从SequentialWorkflowActivity, StateMachineWorkflowActivity派生而来。VS2008提供了顺序工作流控制台应用程序和类库两种模板,本文主要介绍顺序工作流控制台应用程序模板。

创建工作流项目

具体步骤省略,详细请参见参考文献所示。查看生成的工作流代码如下:

 

Code

很容易看出,新建的工作流Workflow1是从SequentialWorkflowActivity派生。

新建的工作流只有起始点,没有任何活动。这里我们添加一个Code activity。添加了这个活动后,我们发现,这个活动出现了错误,是因为ExecuteCode没有设定,这里只需双击Code activity即可,并在代码文件中添加Console.WriteLine("Hello, World!");。一个Hello, World!工作流就这样完成了。

解析工作流调用代码(宿主程序代码)

       

Code

注意:

1. 通过WorkflowRuntime类为工作流初始化提供可配置的运行环境

2. 通过AutoResetEvent类,协调主线程和工作流线程。

3. 通过WorkflowInstance类创建工作流实例。

创建一个比Hello, World更高级的工作流

作业:创建一个工作流,使之支持一个文件加中的所有文件拷贝到另外一个文件夹。

思路:

1.创建一个代码活动,解析从宿主程序传来的源文件夹和目的文件夹;

2.创建一个循环活动(一个个拷贝,直到所有文件拷贝完毕)

        在循环活动中嵌入代码活动,完成单个文件的拷贝

这里需要解释几个问题:

循环活动条件设置

while activity活动中,规则采用声明性规则条件,当前是第几个文件 < 总共几个文件。在后台生成如下文件workflow.rules:

 

Code

 

在后台,通过

System.Workflow.Activities.Rules.RuleConditionReference ruleconditionreference1 = new System.Workflow.Activities.Rules.RuleConditionReference();

ruleconditionreference1.ConditionName = "条件1";

this.whileActivity1.Condition = ruleconditionreference1;

进行加载到循环活动中。

宿主程序和工作流的通讯

如何向工作流中传递参数:

在工作流中定义成员变量:

public string toFolder { get; set; }

public string fromFolder { get; set; }

public int totalFiles { get; set; }

 

在宿主程序初始化工作流实例的时候,将参数传入

var parameters = new Dictionary<string, object>();

parameters.Add("fromFolder", @"K:"test");

parameters.Add("toFolder", @"K:"backup");

WorkflowInstance instance =

    workflowRuntime.CreateWorkflow(

        typeof(WorkflowDemo1.Workflow1), parameters);

如何从工作流中获取参数:

WorkflowCompletedEventArgs e 中,即可获取工作流中的相关信息,如:e.OutputParameters["totalFiles"]

参考文献

本翻译没有按照原文,详细请查阅

http://social.msdn.microsoft.com/content/en-us/msft/netframework/wf/learn/Intro-SequentialWorkflows

posted on 2008-12-10 21:58  mjgforever  阅读(2008)  评论(3编辑  收藏  举报