WF4.0_3
来源:互联网 发布:电机维修数据价格表 编辑:程序博客网 时间:2024/05/01 23:38
通过本节,可以初步了解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"屏幕的输出的工作流的例子
在这个例子中我们使用如下方式启动了该流程
classProgram
{
staticvoid Main(string[] args)
{
WorkflowInvoker.Invoke(newWorkflow1());
}
}
在实际应用中,我并不使用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]事件
privatevoid 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中要创建实例要使用WorkflowRuntime的CreateWorkflow方法.
而在WF4中,不需要显示创建一个[WorkflowRuntime],而是直接使用[WorkflowInstance (bate1中)] 创建,这也是到了bate2中将[WorkflowInstance ]改名为[WorkflowApplication]的原因
classProgram
{
staticvoid Main(string[] args)
{
WorkflowRuntime workflowRuntime =new WorkflowRuntime();
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(wxwinterActivity));
instance.Start();
System.Console.Read();
}
}
publicclass wxwinterActivity : System.Workflow.ComponentModel.Activity
{
protectedoverride System.Workflow.ComponentModel.ActivityExecutionStatus Execute(System.Workflow.ComponentModel.ActivityExecutionContext executionContext)
{
System.Console.WriteLine("wxd");
returnbase.Execute(executionContext);
}
}
- WF4.0_3
- [WF4.0 实战] WF4.0 Receive && Send
- WF4.0 学习系列
- WF4.0_1
- WF4.0_2
- WF4.0_4
- WF4.0与多线程
- WF4.0和BookMark
- WF4.0持久化
- wf4
- [WF4.0 实战] WF4.0申请审批实例
- WF4.0 基础篇 (十四) Delay 与WF4中的线程
- WF4.0(2)----设计工作流
- [WF4.0]Windows Workflow 4.0初体验
- WF4.0 工作流的结束,终止,异常
- WF4.0实战:超市收银软件
- WF4.0与WF3.X区别
- WF4.0实战(三):WCF服务
- Spring-事件传递
- WF4.0_2
- 你需要知道的 16 个 Linux 服务器监控命令
- 下载时发现积分不够怎么办?
- Ruby Cheat Sheet
- WF4.0_3
- 比大小
- site:wenku.baidu.com妙用——不用财富值,破解百度文库下载
- (x&y)+((x^y)>>1)
- JS的正则表达式
- Cheat Sheet
- Nginx URL Rewrite – URL 转发规则
- ios学习笔记
- Oracle几个难理解概念整理