






















简介
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类创建工作流实例。
作业:创建一个工作流,使之支持一个文件加中的所有文件拷贝到另外一个文件夹。
思路:
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
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。