zoukankan      html  css  js  c++  java
  • 坚持学习WF(1):从HelloWorld开始

    [置顶]坚持学习WF文章索引

    Microsoft Windows Workflow Foundation (WF) 是一个可扩展框架,用于在 Windows 平台上开发工作流解决方案,是.NET 3.0中新增的一部分,最近开始学习WF,在此做个记录和大家一起学习。

    我们就从Helloworld开始吧,我使用是Visual Studio 2008中文版。我们先来新建一个“顺序工作流控制台应用程序”项目,如下图:

    1

    项目建立完成后默认会包括以下几部分(如下图)

    2

    1.引用中包含的:

    System.Workflow.Activities

    System.Workflow.ComponentModel

    System.Workflow.Runtime

    System.WorkflowServices

    这些是.Net Framework中WF的一些类库。

    2.可视化的工作流设计器

    Workflow1.cs是可视化的workflow工作流设计器,你可以将工具箱里的活动控件拖到该设计器中,这里是你定义工作流的主要地方,该可视化的设计器有自动检测功能,没有通过检测会有叹号做相应提示。

    3.Program.cs中包括工作流的宿主程序,本例中工作流的宿主是控制台应用程序,还可以是其他类型的程序,windows form,ASP.NET等。

    4.活动

    WF主要的组成部件是活动(Activity),活动组成了工作流中的步骤(或任务),也可以说活动定义了工作流.我们按顺序和层次组织活动,然后这些活动将作为指令供工作流引擎执行.WF中所有的活动都继承一个基类-Activity,WF就运作在这些基本活动库中的现成活动之上.Windows Workflow允许开发人员扩展基本活动库的功能,通过创建自定义活动来解决特定领域的问题.

    下图是微软已经提供的一些活动。

    3

    下面开始我们的任务:

    1. 我们往Workflow1.cs中拖入一个CodeActivity,你会发现有个感叹号,这里就是工作流设计器的检测功能,如下图:

    7

    我们设置CodeActivity活动的ExecuteCode属性为Helloworld,设置后VS会自动帮我们生成事件处理程序,我们只需要写上我们的代码,如下

    private void Helloworld(object sender, EventArgs e)
            {
                System.Console.WriteLine(
    "Hello world");
            }


    2.宿主的实现:

    在Program.cs中系统已经为我们生成了我们需要的代码

    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(HelloWorld.Workflow1));
                    instance.Start();

                    waitHandle.WaitOne();
                    Console.WriteLine(
    "Press any key to exit");
                    Console.ReadLine();


    WorkflowRuntime:在工作流的运行环境(宿主)中,为工作流提供运行的引擎。

    WorkflowInstance:WorkflowInstance是指在工作流引擎中运行的工作流实例。

    WorkflowCompleted和WorkflowTerminated是引擎中的某个实例完成后和终止后的事件,WorkflowRuntime还有其他的事件,在次暂不做介绍,以后详细说明。

    3.现在我们可以运行看看效果了

    5

    这些可能太简单了,那我们来让我们的工作流接受外部的参数。

    1.在Workflow1.cs中定义属性

     private string name = "";
            
    public string Name
            {
                
    get { return name; }
                
    set { name = value; }
            }


    2.将CodeActivity的ExecuteCode事件的代码做下调整

      private void Helloworld(object sender, EventArgs e)
            {
                System.Console.WriteLine(
    "{0}:Hello world",name);
            }


    3.在工作流的宿主程序中来定义Dictionary,并用Add方法添加参数

     Dictionary<stringobject> dictionary = new Dictionary<stringobject>();
                    dictionary.Add(
    "Name","Cary");

    注意add里的属性名字要和定义的一样。

    4.使用CreateWorkflow的重载方法来产生工作流实例

     

    WorkflowInstance instance =workflowRuntime.CreateWorkflow(typeof(HelloWorld.Workflow1), dictionary);

     

    5.现在我们在运行,看看最终的效果

    6

    代码下载:HelloWorld
    下一篇:坚持学习WF(2):WF创作模式和设计时工具

    作者:生鱼片
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    VS2008 环境中完美搭建 Qt 4.7.4 静态编译的调试与发布 Inchroy's Blog 博客频道 CSDN.NET
    编写可丢弃的代码
    c++ using namespace std; 海明威 博客园
    解决MySQL server has gone away
    nginx upstream 调度策略
    (2006, 'MySQL server has gone away') 错误解决 dba007的空间 51CTO技术博客
    Linux IO模型漫谈(2) 轩脉刃 博客园
    redis源码笔记 initServer 刘浩de技术博客 博客园
    MySQLdb批量插入数据
    词库的扩充百度百科的抓取你知道这些热词吗? rabbit9898 ITeye技术网站
  • 原文地址:https://www.cnblogs.com/carysun/p/WFHelloWorld.html
Copyright © 2011-2022 走看看