惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
T
Threatpost
Scott Helme
Scott Helme
I
Intezer
Cloudbric
Cloudbric
Help Net Security
Help Net Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
Google Online Security Blog
Google Online Security Blog
N
News | PayPal Newsroom
L
LINUX DO - 最新话题
罗磊的独立博客
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
GbyAI
GbyAI
月光博客
月光博客
Last Week in AI
Last Week in AI
MyScale Blog
MyScale Blog
A
Arctic Wolf
Y
Y Combinator Blog
S
SegmentFault 最新的问题
F
Full Disclosure
T
Tenable Blog
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
The Exploit Database - CXSecurity.com
L
LangChain Blog
S
Secure Thoughts
Recorded Future
Recorded Future
C
Check Point Blog
Schneier on Security
Schneier on Security
Hugging Face - Blog
Hugging Face - Blog
L
Lohrmann on Cybersecurity
WordPress大学
WordPress大学
K
Kaspersky official blog
The Register - Security
The Register - Security
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
腾讯CDC
Cyberwarzone
Cyberwarzone
P
Palo Alto Networks Blog
Hacker News: Ask HN
Hacker News: Ask HN
The GitHub Blog
The GitHub Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
F
Fortinet All Blogs
T
Threat Research - Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
博客园 - 叶小钗

博客园 - mjgforever

sp_executesql和临时表的用法 51 条 ActionScript 3.0 和 Flex 优化技术与实践 open source Flex project list Open Source Replication and Synchronization Tools Written in Java 用SyncML进行异构数据库复制 WF学习系列之六:工作流和宿主程序通讯异常引发的思考 - mjgforever - 博客园 WF学习系列之五:状态机工作流学习 WF学习系列之三:RuleSet知识点概述 WF学习系列之二:开发工作流知识点概述 WF学习系列之一:WF基本知识点概述 abstract, virtual, override, new 关键字的用法 ArcIMS 安装指南 Google推出Protocol Buffers:争夺网络时代数据格式 Protocol Buffers 简介 Protocol Buffers:Google 的数据交换格式 微软vs.VMware:虚拟化中的真实战争 文本文件与二进制文件 字符编码简介:ASCII,Unicode,UTF-8,GB2312 Adobe Flex的十大误解
WF学习系列之四:顺序工作流控制台应用程序模板介绍
mjgforever · 2008-12-10 · via 博客园 - mjgforever

简介

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