WF4.0_3

转载 2012年03月21日 09:30:16
 

通过本节,可以初步了解WF程序的特性,为以后的WF类应用开发提供一个初步的感性认识

 

目录

1    流程实例WorkflowApplication与设计WF程序的基本原则    1

1.1    流程实例WorkflowApplication    1

1.2    设计WF程序的基本原则    3

1.2.1    第一步: 用WPF创建一个用于运行流程的宿主    4

1.2.2    第二步:创建一个Xaml的工作流    5

1.2.3    第三步:运行流程    6

1.3 WF4.0与WF3.X 的运行环境对比说明(如果对WF3.X不熟悉可以忽略本节)    7

 

 

本文的两个例子

 

http://files.cnblogs.com/foundation/LoadXamlSample.rar

 

http://files.cnblogs.com/foundation/WorkflowApplicationSample.rar

流程实例WorkflowApplication与设计WF程序的基本原则

流程实例WorkflowApplication

我在[开始使用WF4.0.]中创建一个"hello wxwinter"屏幕的输出的工作流的例子

 

在这个例子中我们使用如下方式启动了该流程

class Program

{

static void Main(string[] args)

{

WorkflowInvoker.Invoke(new Workflow1());

}

}

 

在实际应用中,我并不使用WorkflowInvoker.Invoke方式创建工作流(WorkflowInvoker的功能我会在以后的文章中详细介绍),我会用WorkflowApplication创建工作流实例, WorkflowApplication用于跟踪和管理单个工作流实例,先看一下WorkflowApplication的结构:

 

类名

System.Activities.WorkflowApplication

文件

System.Activities.dll

结构说明

继承 WorkflowInstance

是一个 sealed类

功能说明

通过从构造函数传入Activity对象,创建一个工作流的实例

 

 

WorkflowApplication提供了很多管理实例的属性与方法,今天先介绍一下Completed属性

Action<WorkflowApplicationCompletedEventArgs> Completed { get; set; }

当工作流完成时,会调用该属性所指定的System.Action<T>委托

 

委托参数WorkflowApplicationCompletedEventArgs:

ActivityInstanceState CompletionState

IDictionary<string, object> Outputs

Exception TerminationException

Guid InstanceId

IEnumerable<T> GetInstanceExtensions<T>() where T :

 

下面的代码使用WorkflowApplication方式运行流程

class Program

{

static void Main(string[] args)

{

// WorkflowInvoker.Invoke(new Workflow1());

 

//创建实例

WorkflowApplication instance = new WorkflowApplication(new Workflow1());

 

//当实例运行完成时调用的方法

instance.Completed = new Action<WorkflowApplicationCompletedEventArgs>(workflowCompleted);

 

//打印实例ID

System.Console.WriteLine(instance.Id);

 

//启动实例

instance.Run();

 

System.Console.Read();

}

 

static void workflowCompleted(WorkflowApplicationCompletedEventArgs e)

{

System.Console.WriteLine("状态:{0}",e.CompletionState.ToString());

System.Console.WriteLine("实例编号:{0}", e.InstanceId);

}

}

 

设计WF程序的基本原则

很多时候,初学者学习WF时都使用[Workflow Console Application]这个项目模板

 

以至于学习了很久,许多Activity也使用的很熟练了,但就是无法理解WF究竟该怎样应用到实际项目中.

 

其实[Workflow Console Application]这个项目模板仅仅是用于初学者练习的,WF有两种创建流程的方式:

1.用类创建流程,[Workflow Console Application]这个项目模板就是这种方式

2. 用XML格式字符串创建流程

由于WF设计的目的就是灵活,所以用XML格式字符串创建流程的方式才能体现这一点,下面我就用一个例子来演示一下用XML格式字符串创建流程的方式,

 

 

 

 

 

 

 

第一步: 用WPF创建一个用于运行流程的宿主

 

建立一个[WFHost]的WFP项目,将解决方案命名为[LoadXamlSample]

 

添加[System.Activities]类的引用

 

添加一个名为[run]的文本框(AcceptsReturn="True"),添加一个名为[runButton]的按钮, 为[runButton]添加[Click]事件

private void runButton_Click(object sender, RoutedEventArgs e)

{

System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding();

 

byte[] bs = utf8.GetBytes(this.xamlTextBox.Text);

 

System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(bs);

 

Activity activity = ActivityXamlServices.Load(memoryStream);

 

WorkflowApplication myInstance = new WorkflowApplication(activity);

 

myInstance.Run();

}

 

为了能看到控制台输出,要将项目的输出类型设为[Console Application]

 

第二步:创建一个Xaml的工作流

用文本文件创建Xaml工作流是痛苦的工作,在没为大家讲解开发流程设计器之前,我们先用VS2010创建一个流程

创建一个名为[wxwinterWorkflow]的[Activity Library]项目

 

设计一个如下流程

 

得到流程的xaml字串

 

第三步:运行流程

运行[WFHost]程序,将上步得到的xaml字符串粘贴到文本框中,点击[run]按钮,会在控制台看到"hello wxwinter"的输出

 

将文本框中的<WriteLine Text="hello wxwiter" />改为<WriteLine Text="hello wxd" />,点击[run]按钮,会在控制台看到"hello wxd"的输出

 

WF4.0与WF3.X 的运行环境对比说明(如果对WF3.X不熟悉可以忽略本节)

WF3.X与WF4运行环境最明显的变化是,在WF3.X中要创建实例要使用WorkflowRuntimeCreateWorkflow方法.

而在WF4中,不需要显示创建一个[WorkflowRuntime],而是直接使用[WorkflowInstance (bate1中)] 创建,这也是到了bate2中将[WorkflowInstance ]改名为[WorkflowApplication]的原因

class Program

{

static void Main(string[] args)

{

WorkflowRuntime workflowRuntime = new WorkflowRuntime();

WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(wxwinterActivity));

instance.Start();

System.Console.Read();

}

}

public class wxwinterActivity : System.Workflow.ComponentModel.Activity

{

protected override System.Workflow.ComponentModel.ActivityExecutionStatus Execute(System.Workflow.ComponentModel.ActivityExecutionContext executionContext)

{

System.Console.WriteLine("wxd");

return base.Execute(executionContext);

}

}

相关文章推荐

WF4.0与WF3.X区别

WF4并非是在原有WF3.x上的改进,而是全新的开发有新的命名空间,程序集,原WF3的部分会继续保留这主要是为了兼容,下面的表格告诉你具体的变化:  1.程序集的变化 WF3.x程序集WF4程序集Sy...

WF4.0 基础篇 (二十六) Interop调用WF3.X的Activity

本节主要介绍Interop调用WF3.X的Activity   本文例子下载: http://files.cnblogs.com/foundation/InteropSample.rar ...

WF3.0和4.0区别介绍

最近要研究下WF4.0的相关内容,将自己认识的、理解的写下来与大家共勉,有兴趣的朋友可以一起探讨一下。      相对于之前的3.0、3.5中的WorkFlow来说,4.0进行了很大的变动,包括流...

WF4.0 基础篇 (八) 控制流Activity

本节主要介绍IF, Switch, While, DoWhile, ForEach 的使用.   本文例子下载: http://files.cnblogs.com/foundation/c...

WF4.0 基础篇 (二) Activity介绍及WriteLine Activity的使用

目录 1    Activity介绍及WriteLine Activity的使用    1 1.1    代码下载    1 1.2    什么是Activity    1 1.3    WF4.0 ...

WF4.0 入门系列(五)WorkflowApplication

到现在为止我们创建的活动是由WorkflowInvoker通过Invoke方法来调用,WorkflowInvoker.Invoke()方法是一个同步方法,被调用的工作流和调用者在同一个线程中。 调用...

WF4.0 基础篇 (五) 数据的传递 Variable变量

本节主要介绍如何在WF4.0中使用变量,以及为变量赋值  本文例子下载: http://files.cnblogs.com/foundation/VariablesSample.rar http://...

WF4.0 基础篇 (二十二) Tracking

Tracking 介绍 WF跟踪是用来记录工作流执行情况 WF跟踪由以下几部分组成: 跟踪记录 Tracking Records 从工作流运行时...

WF 4.0 beta1活动概览(2):Flowchart、Messaging、PowerShell以及Migration

本文接着来介绍一下WF 4.0 beta1的其他几个活动分类:Flowchart、Messaging、PowerShell和Migration。FlowchartFlowchart是WF中新引进的一种...

WorkFlow入门Step.2—Building a Simple WorkFlow-For-WF4.0

开篇        上篇,我们简单的说明了WF的入门,那么院子里面已经有很多的高手,写了不少的关于工作流的应用,最近在集成工作流平台的过程中也是发现了不少的问题和心得体会,工作流果真不只是审批那么简单...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WF4.0_3
举报原因:
原因补充:

(最多只允许输入30个字)