WF学习笔试1-HelloWorld

        好久都没有接触和学习新技术,要抱怨说公司忙,实在为自己的懒惰找借口。工作的人慢慢的就与学生不太一样,有时抱着得过且过的心态!现在想想还是很怀念以前学生年代深夜敲击键盘的学习劲头!
流程引擎不是第一次接触,在去年的时候与一个同事在外面接了一个万科的OA系统,当时对方指定要使用K2.NET流程引擎开发。并给我们提供了带服务器的虚拟机。那时是我第一次接触流程引擎,对工作流的概念也有了比较直观的认识!。
上周六陪朋友去了书店看书,拿了二本.NET3.0方面的书。其中一本第32章讲到用WF制作订单状态管理工作流。翻开看了一下知道WF,了解到微软现在给VS2008中集成了这样一个框架,个人感觉,它的应用范围应该会越来越广。于是这二天下班回来后开始学习WF。

        闲话打住,切入正题。在开始还是先给不明白的朋友介绍一下WF(网上也有称为WWF,不过微软建议称为WF)
WF全称是 Microsoft Windows Workflow Foundation ,它是一个可扩展框架,用于在 Windows 平台上开发工作流解决方案,VS2005下需要安装.NET3.0框架及Visual Studio 2005 Extensions for Windows Workflow Foundation.exe。VS2008中默认集成WF。

        我学东西也不大喜欢先搞概念,理论的东西,喜欢比较直观的,看的见的,HelloWorld基本是学每种程序的入门级示例。虽然老套,但我想还是很有用。今天的笔记就写写WF版本的HelloWorld。
        第1步:打开VS2008,新建立项目Workflow->顺序工作流控制台程序 WFHelloWorld

         建立后项目结构如下:


1.其中Program.cs是宿主程序,也即是控制台程序可以理解为主程序!
2.Workflow1.cs是可视化的workflow工作流设计器,你可以将工具箱里的活动控件拖到该设计器中,这里是你定义工作流的主要地方,该可视化的设计器有自动检测功能,没有通过检测会有叹号做相应提示。
    在这里有必要介绍一下WF中的Activity(活动)。
    WF主要的组成部件是活动(Activity),活动组成了工作流中的步骤(或任务),也可以说活动定义了工作流.我们按顺序和层次组织活动,然后这些活动将作为指令供工作流引擎执行.WF中所有的活动都继承一个基类-Activity,WF就运作在这些基本活动库中的现成活动之上.Windows Workflow允许开发人员扩展基本活动库的功能,通过创建自定义活动来解决特定领域的问题.
    我们可以自己定义Actitvity,微软也为我们提供了一些Actitvity

了解这些后,我们接着做。

        第2步:我们往Workflow1.cs中拖入一个CodeActivity,注意图中有个感叹号,这里就是前面说的工作流设计器的检测功能,如下图:

这是因为code活动,我们没有定义他的ExecuteCode(执行代码)

在ExecuteCode中输入一个方法名,程序会自动生成一个事件方法。

 

/* ***********************************************
//author:fengyan
//blog:
http://eflylab.cnblogs.com
//date:2008-06-18 22:43
/**********************************************
*/  
using  System;
using  System.ComponentModel;
using  System.ComponentModel.Design;
using  System.Collections;
using  System.Drawing;
using  System.Linq;
using  System.Workflow.ComponentModel.Compiler;
using  System.Workflow.ComponentModel.Serialization;
using  System.Workflow.ComponentModel;
using  System.Workflow.ComponentModel.Design;
using  System.Workflow.Runtime;
using  System.Workflow.Activities;
using  System.Workflow.Activities.Rules;

namespace  WFHelloWorld
{
    
public   sealed   partial   class  Workflow1: SequentialWorkflowActivity
    {
        
public  Workflow1()
        {
            InitializeComponent();
        }

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

}

我们给方法输入一个代码,很简单的输出!
这时我们返回去看 Program.cs里面的代码体
static   void  Main( string [] args)
        {
            
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 (WFHelloWorld.Workflow1));
                instance.Start();

                waitHandle.WaitOne();
            }
        }

这是工具自动生成的先别着急它们的意思,我们在最后稍加修改,
static   void  Main( string [] args)
        {
            
// WorkflowRuntime:在工作流的运行环境(宿主)中,为工作流提供运行的引擎。
             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:是指在工作流引擎中运行的工作流实例。
                WorkflowInstance instance  =  workflowRuntime.CreateWorkflow( typeof (WFHelloWorld.Workflow1));
                instance.Start();

                waitHandle.WaitOne();

                
// 等待用户响应退出
                Console.WriteLine( " Press any key to exit " );
                Console.ReadLine();
            }
        }

在最后加上二行,为方便观看效果!现在可以运行,F5

输入HelloWorld。
这可能是最简单的WFHelloWord了,稍微加修改一下,增加一个简单的互动功能。
我们在 Workflow1中添加一个属性UserName
private   string  username  =   "" ;
        
public   string  UserName
        {
            
get  {  return  username; }
            
set  { username  =  value; }

        }
        
public  Workflow1()
        {
            InitializeComponent();
        }

        
private   void  ExecuteHello( object  sender, EventArgs e)
        {
            System.Console.WriteLine(
" {0},Hello world " ,username);
        }
修改 Program.cs中
  static   void  Main( string [] args)
        {
            
// WorkflowRuntime:在工作流的运行环境(宿主)中,为工作流提供运行的引擎。
             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();
                };
                
               
                Console.WriteLine(
" Press enter your userName " );
                Dictionary
< string object >  dictionary  =   new  Dictionary < string object > ();
                
// 接收用户输入
                 string  userName  =  Console.ReadLine();
                
// 注意下面的UserName必须与Workflow1中的属性名完全一致才行
                dictionary.Add( " UserName " , userName);
                
// WorkflowInstance:是指在工作流引擎中运行的工作流实例。
                
// 利用重载创建
                WorkflowInstance instance  =  workflowRuntime.CreateWorkflow( typeof (WFHelloWorld.Workflow1), dictionary);
                instance.Start();

                waitHandle.WaitOne();

                
// 等待用户响应退出
                Console.WriteLine( " Press any key to exit " );
                Console.ReadLine();
            }
        }
运行效果


DownLaod Demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值