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创作模式和设计时工具

    作者:生鱼片
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    【VirtualBox】共享文件夹失效问题
    【Ubuntu】全局代理
    phpStudy(lnmp)集成环境安装
    MemcacheQ 的安装与使用
    Windows 64位下安装Redis详细教程
    http与https的区别
    cookie 和session 的区别详解
    setcookie各个参数详解
    MySQL 数据备份与还原
    linux命令行下导出导入.sql文件
  • 原文地址:https://www.cnblogs.com/carysun/p/WFHelloWorld.html
Copyright © 2011-2022 走看看