WF4.0 基础篇 (三) 流程实例WorkflowApplication与设计WF程序的基本原则
通过本节,可以初步了解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中要创建实例要使用WorkflowRuntime的CreateWorkflow方法.
而在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); } } |
转载于:https://www.cnblogs.com/foundation/archive/2009/10/28/1591616.html
WF4.0 基础篇 (三) 流程实例WorkflowApplication与设计WF程序的基本原则相关推荐
- WF4.0 基础篇 (三十 完) 对学习WF的一点建议
从09年10月份 NET4.0 Bata 2发布后,我就开始写[WF4.0 基础篇]这个系列,经历了5个多月终于在NET4.0正式发布前将这个系列完成了 这段时间与一些对WF4.0感兴趣的公司与开发人 ...
- [转]WF4.0 基础篇 (一)开始使用WF
本文转自:http://www.cnblogs.com/foundation/archive/2009/10/26/1589993.html 来博客园写WF主题博客已经3年了, 在园子里认识了很多朋友 ...
- WF4.0 基础篇 (二) Activity介绍及WriteLine Activity的使用
从本篇开始,将正式讲解WF4.0,本文主要涉及如下内容:Activity介绍, WF4.0 中工作流的结构,通过WriteLine演示InArgument<T>参数的使用 目录 1 ...
- WF4.0 基础篇 (六) 数据的传递 Arguments 参数
节主要介绍如何在WF4.0中使用参数,以及在流程启动时传入参数据在流程结束时读取参数 本文例子下载: http://files.cnblogs.com/foundation/ArgumentsSamp ...
- WF4.0 基础篇 (十四) Delay 与WF4中的线程
本节主要介绍WF的实例是单线程运行的,Delay并不是Thread.Sleep,Parallel是单线程运行的,WorkflowApplication与WorkflowInvoker在调用流程上的区别 ...
- WF4.0 基础篇 (十八) Flowchar
本节主要介绍WF4 中 Flowchart的使用 本文例子下载: http://files.cnblogs.com/foundation/FlowcharSample.rar 本文例子说明 Flowc ...
- python自学流程-python 学习之 基础篇三 流程控制
前言: 一. python中有严格的格式缩进,因为其在语法中摒弃了"{}"来包含代码块,使用严格的缩进来体现代码层次所以在编写代码的时候项目组要严格的统一器缩进语法,一个tab按键 ...
- WF4.0 基础篇 (二十八) WF调用PowerShell
PowerShell 提供了命令行管理系统的功能,但通常情况下,操作人员要完成某种业务需要多组PowerShell 命令,这样会很烦琐,错误率也比效高.操作人员可以编写powerShell脚本来组织命 ...
- WF4.0 基础篇 (二十九) WorkflowInspectionServices
本文例子下载: http://files.cnblogs.com/foundation/WorkflowInspectionServicesSample.rar WorkflowInspectionS ...
最新文章
- 静态属性和静态方法2 - C++快速入门22
- Python知识:opencv实现的直方图
- Java反射在JVM的实现
- Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略
- java读写锁降级_java的读写锁中锁降级的问题
- 石河子大学计算机专业录取分数线,石河子大学2018年各省及各专业录取分数线及最低录投档线【理科 文科】...
- python中的string模块_有没有可能模仿Python中的string模块?
- Ghost 2.18.3 发布,基于 Markdown 的在线写作平台
- 2034.股票价格波动-LeetCode
- 百度地图手机端单触点单击和长按事件,解决部分手机(小米手机)地图单击事件失效,多触点、拖动依然触发长按的bug...
- 【记录】【解决方案】java发邮件错误:Couldn‘t connect to host, port: localhost, 25; timeout -1;易邮SMTP服务器无法启动;
- 腾讯产品经理能力模型
- 集成电路制造及工艺 主要名词解释
- 干货|别找了,分享80个无版权、高清、免费图片素材网站给你!
- AD20 mill与mm转换
- 去除Word中的红色或则绿色波浪线
- IPC Send timeout detected模拟和总结
- 服务器bios怎么用u盘装系统,如何进入BIOS并用U盘重装系统
- 微信支付v3——批量转账到零钱(提现)
- 软件项目管理工具,JAVA WEB 框架技术(结合实际工作经验,全是干货)
热门文章
- FPGA中的Logic Cells, Logic Slices, Configurable Logic Blocks and Gates 的定义
- Verilog中testbench的设计,文件读取和写入操作
- 人人都能看懂LSTM
- pytorch定义神经卷积网络CNN源码
- pyaiml聊天机器人
- fork() 成为负担,需要淘汰
- 实战Jenkins+SVN+tomcat持续集成发布
- VS下对Resx资源文件的操作
- [CareerCup] 17.6 Sort Array 排列数组
- Android Framework层的蓝牙管理