zoukankan      html  css  js  c++  java
  • 利用WF开发简单的HelloWord程序

     1. 什么是工作流

      我给工作流下了这样的定义,工作流就是一个过程,这个过程会产生一定的结果。

      其实,在OA系统中,审批流就是我们最常见的工作流之一。

      另外,简单了说,其实我们所画的流程图就是一种最简单的工作流,工作流最大的特点就是图形化。工作流是按照顺序驱动或者事件驱动去触发下一步操作,从而最终得到一个结果。

      其实,我们也可以把他理解为一个过程化的职责链。

      2. 工作流的类型

      工作流大致分为两类,顺序工作流和事件驱动工作流。

      顺序工作流是我们很常见的工作流,这个工作流是由我们事先规定好的顺序一步步地走下去,他们执行的步骤是不可以改变的。

      事件驱动工作流,我们也称之为有限状态机,他状态的变更是犹由于特定的事件而触发的。

      举例如下:

      顺序工作流:审批流其实就是典型的顺序工作流,一个审批对象一步步地层层审批,拿一次面试过程来说,首先人事部简历筛选,然后是技术经理面试,然后是总经理面试,这都是按照流程来的。

      事件驱动工作流:想想我们的软件工程流程,是不是这样的:

      3. 第一个实例:Hello world

      学任何程序,第一个例子往往都是Hello world,这次也不例外。

      让我们先来构建一个简单的WF小程序。

      我所使用的环境是Visual Studio 2008 + .NET Framework 3.5 sp1来搭建项目:

    首先让我们来熟悉环境:

      打开VS2008,选择新建——> 项目:

      然后选择Workflow——>顺序工作流控制台应用程序。然后点击确定就进入了我们的WF项目中。

      在项目中,我们可以看到Program.cs和Workflow1.cs。Workflow1我不多说,这个当然是我们的工作流程序。

      那来看一下Program.cs:

      4. 宿主

      Windows workflow foundation不是一个独立的产品,他需要在一个宿主的环境下才能运行。

      这个宿主可以是控制台应用程序,Winform程序,也可以是ASP.NET程序。

      WF的运行是通过工作流的运行时引擎来实现的。实际上,工作流运行时引擎和宿主的应用程序在同一进程中。

      5. 继续Hello world

      在工具箱中,拖出一个Code控件。

      然后为codeActivity1起一个有意义的Name为codeActivityHello。

      然后去实现ExcuteCode事件,实现这个事件,运行库将自动调用这个方法。

    实现如下:

      好了,让我们运行这段程序:

      6. 深入解析宿主文件

      让我们进一步地去解析宿主文件Program.cs:

      WorkflowRuntime:为工作流执行引擎提供了可执行环境。

      接下来,workflowRuntime.WorkflowCompleted事件和workflowRuntimeTerminated分别指定了工作流执行结束和执行终止时所调用的匿名方法。

     接下来创造一个相应的工作流的实例,然后让这个实例开始执行。

      而后去调用AutoResetEvent的实例waitHandle.WaitOne()作用在于阻止当前线程的执行,从而让该工作流进行结束后,即WorkflowRuntime.WorkflowComplete事件技术后,我们再可以在这条语句后来调用执行其他的语句。

      没什么好说的了,接下来去创建一个工作流的实例,然后开始执行。

      7. 让程序更有趣一些

      分析过宿主文件之后,那我们开始让程序更有趣一些。

      而手脚就让我们从那两个匿名方法开始。

      首先修改workflow1.cs 的 后台代码:

      当工作流执行的时候,他就给Workflow1类所实例化的对象中的Message属性赋值为Hello world。我们需要做的是将这个Message获取出来。

      先让我们来看看本质,其实,在工作流的对象中,所有的属性都是以键值对的形式存储在哈希表中,因此,我们可以通过WorkflowCompleteEventArgs参数将对应的属性得到,代码如下:

    接下来,我们就可以打印出message了。

      8. 进一步改造程序

      既然我们可以获得参数,当然也可以向工作流中传入参数。

    让我们先来改造一下workflow1.cs的后台代码文件:

    向工作流中传入参数其实很简单,让我们来注意一下这个方法:

    这个方法通过传入一个类型来实例化一个对应的工作流实例,当然,我们就是运用这个方法的重载方法去传入对应的实例:

      看看效果:

     

    转载:http://tech.ddvip.com/2009-04/1239352175114379.html

  • 相关阅读:
    技能的切实掌握 必须动手
    sqlite 网址
    android视频教程
    Windows Azure
    mysql 存储过程 获取统计结果
    “道家”幸福生活的组成
    [文摘20110724]徐鹤宁 语录
    eclipse swt
    mysq 存储过程 插入测试数据
    WPF 视频教程
  • 原文地址:https://www.cnblogs.com/KimhillZhang/p/1529603.html
Copyright © 2011-2022 走看看