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

推荐订阅源

N
News and Events Feed by Topic
V
V2EX
博客园 - 【当耐特】
Vercel News
Vercel News
雷峰网
雷峰网
爱范儿
爱范儿
WordPress大学
WordPress大学
云风的 BLOG
云风的 BLOG
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Azure Blog
Microsoft Azure Blog
F
Full Disclosure
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
NISL@THU
NISL@THU
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Attack and Defense Labs
Attack and Defense Labs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
P
Proofpoint News Feed
B
Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
K
Kaspersky official blog
I
InfoQ
Google Online Security Blog
Google Online Security Blog
L
LINUX DO - 最新话题
Project Zero
Project Zero
Engineering at Meta
Engineering at Meta
V
Visual Studio Blog
AI
AI
Schneier on Security
Schneier on Security
B
Blog RSS Feed
T
Tor Project blog
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
S
Security @ Cisco Blogs
T
Threat Research - Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
Cyber Attacks, Cyber Crime and Cyber Security
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
V2EX - 技术
V2EX - 技术
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
Arctic Wolf
Webroot Blog
Webroot Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main

博客园 - Cheek G

JQuery常用方法一览 6 bytes !! IE判定 项目小记: IFRAME引起内存泄露的解决方法 - Cheek G wcf中使用Session 整人小程序【转自CSDN】 Asp.net MVC框架学习【收藏】 Web Services 学习【收藏】 输出CSV文件并直接打开时出现SYLK异常 JS 其他(二) - Cheek G JS 其他 - Cheek G JS验证类(一) 非常NB的sql2005分页 web页局部打印 - Cheek G - 博客园 asp.net在ie7中使用FileUpload上传前预览图片 - Cheek G - 博客园 DIV背景半透明,DIV中的字不半透明 - Cheek G - 博客园 js等比例缩放图片 - Cheek G - 博客园 IIS 7 中默认页设置的小问题 文件的ContentType类型 小全 页面加载完成前显示LOADING....
WF学习日记(一)
Cheek G · 2008-11-10 · via 博客园 - Cheek G

一、什么是WF

     WF:Windows Workflow Foundation的缩写,是微软为Windows平台开发工作流应用程序的一个模块、引擎和工具,它包括了Runtime Service (运行时服务)、 Runtime Engine (运行时引擎) 和 Base Activity Library(基础Activity 库)。(具体说明参考MSDNhttp://msdn.microsoft.com/zh-cn/library/ms734631.aspx

     Workflows是Activity的集合,是寄宿于宿主(进程)的应用,而Activity可以理解为一个类库,允许开发人员自行构建,其中的属性、事件供Workflows调用。

二、WF的Workflow模型

     1.Sequential 顺序模型:流程按照预先定义好的顺序执行。

     2.State Machine 状态机模型:以事件为驱动,使流程本身转换成不同的状态,而每个状态也有其转变范围和事件。

     两种模型可以各自独立运行,也可以互相包含。

三、创建一个简单的 Hello World 程序

     1.新建一个Workflow工程,选择 Sequential Workflow Console Application  顺序工作流控制台程序

     2.双击Workflow1.cs 可以看到一个类型UML的界面(仅仅是类似)

     3.从工具栏中拖一个CODE到 Drop Activities to create a Sequential Workflow (人家已经说的很清楚了)

     4.双击codeActivity1,可以发现生成了其执行事件,我们在其中自定义一个名叫Message的属性(一定要是属性,否则后面Workflow会找不到),在刚生成的事件中键入 Console.WriteLine(Message);

     5.在工程中找到Program.cs双击打开,这是个简单的控制台程序,我们对Workflow的调用就全在using(WorkflowRuntime workflowRuntime = new WorkflowRuntime()){....} 块中了。为了调用Workflow中我们刚定的Message属性,我们定义一个  Dictionary<string,object>myArgs = new Dictionary<string,object>();用来传值,string为属性名,object为值,此处就传入"Hello World"吧........

    6.编译运行

CODE:

            using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())
            {
                AutoResetEvent waitHandle = new AutoResetEvent(false);
                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) {waitHandle.Set();};
                workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
                {
                    Console.WriteLine(e.Exception.Message);
                    waitHandle.Set();
                };

                //WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WFSeqDemo.Workflow1));
                Dictionary<string,object>myArgs = new Dictionary<string,object>();
                myArgs.Add("Message", "Hello World");                
                WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WFSeqDemo.Workflow1), myArgs);
                instance.Start();

                waitHandle.WaitOne();

            }