zoukankan      html  css  js  c++  java
  • WF随笔系列开篇

    今后准备写一系列有关于WF的随笔,接下来进入正题,那有关于WF的一些简介,概念方面的知识。我在这里就不多了说。

    (在文章底部贴了一些相关的WF的文章,仅大家参考)

    今天呢,我主要是针对创建一个WF的简单应用,为向准备学WF同仁做一个开始。

    好,让我们打开Vs2008 beat 2环境

     
    在new project中对workflow六个Templates
    1.Sequential Workflow Console Application
    2. Sequential Workflow Library
    这两个顺序工作流模板,1个是Application, 1个是Library
    3. State Machine Workflow Console Application
    4. State Machine Workflow Library
    那两个针对于State Machine工作流模板,也是一个Application, 和Library.
    5. Workflow Activity Library 创建工作流中活动组件的模板
    6. Empty Workflow Project 这个就不多说了

    首先
    1.建立一个Windows Application Form project
    2.建立一个Activity Library project
    3.建立一个Workflow Library project
    然后
            一.Win Form Project的Form中放置一个button,即可
            二.把原先Activity Library工程中生成Activity.cs 删除
            重新Add 两个Activity ,一个为HelloActivtiy,一个为空的Activity
    这样的话,我们就有两个自定义的Activity了。


    嗯  在上图Templates中我们可以看到有两个Activity Templates

    1个是普通的Activity 1个是 Activity (with code separation)

    一个后缀名为CS,一个后缀名为Xoml(用xml形式来描述它)

    那我们都知道在Workflow Foundation中间,我们可以直接的在运行时加载任何Xoml,然后实例出来相应的Workflow。




     那建立完成HelloActivity.Xoml文件,在ToolBox中拖一个CodeActivity上面,此时会发现CodeActivity1右上方有一个红色的,为什么会这样的呢,是因为我们没有建立相应的方法。点击Properties,ExecuteCode,我们输入建立的方法名:DisplayHelloWorldWF,即可.

    相应添加的代码:

    private void DisplayHelloWorldWF(object sender, EventArgs e)
            
    {
                MessageBox.Show(
    "Hello WorkFlow");
            }

     嗯, 其实每个workflow, activity都是向上图的形式,事实上每个Workflow都视作和Activity等同,一个ActivityWorkflow等同。至此,我们的Activity Library就建立完成,它会以xml形式进行存储,感兴趣的话,大家根据生成的XML,自己研究一下。

    4.回到WorkFlowLibrary中来,我们添加一个WorkFlow.Xoml


    这时大家可以发现,Activity还是Sequential建立出来都是顺序的activity,而且没有给我们选择是建立顺序的activity,还是状态机的activity


    那让我们来看,先让我们点中activity,来看property中的BaseClass,
     
    Base class中有一个是组合式的Activity(CompostieActivity),一个是普通的Activity,那一般来说都是组合式的。


     

    在看System.WorkFlowActivites,TypeName列表中有SequentialActivity,StateActivity;
    那如果继承StateActivity的话,那出来的Activity就会是一个状态机的活动图了。嗯,那在后面讲有关于状态机的话题时在议吧。


     
    5.我们编译一下Activity Library项目,编译之后,在Toolbox中会出现刚才我们建立的两个Activity 组件.



    然后我们把Activity,拖到Sequential WorkFlow,


      此时会看到一个Lock()。锁的意思表示,因为HelloWorldActity1是引用进来的,如果想修改的话,就要去相应的activity处去修改。

    那在工作流中有三个视图:


     
    1. View Cancel Handler
    2. View Fault Handler
    3. View SequentialWorkflow
    cancel流程由用户操作发生的
    fault工作流是由工作流本身发生错误之后触发的,所以一个工作流由三个流程组成.

    最后,回到WinForm项目,编写Button事件

    private void button1_Click(object sender, EventArgs e)
            
    {
                
    using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
                
    {
                    WorkflowInstance instance 
    = workflowRuntime.CreateWorkflow(typeof(SequentialWorkflowLibrary. SequentialWorkflow));
                    instance.Start();
                }

            }

    其实如果你真的不知道如何编写Button事件,可以参考一下SequentialWorkFlowConsoleApplication模板生成的program.cs中的Main方法的Code。
    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(SequentialWorkFlowConsoleDemo.Workflow1));
                    instance.Start();
                    waitHandle.WaitOne();
                }

            }

    当然了,这段代码,其实是实现了一个阻塞的工作流,一旦这个工作流运行起来后,整个就会停在那里,等结束运行之后,才会出来。


    还有就是UI的改变和workflow没有任何关系,相反workflow的状态改变会影响到UI

    好了,今天开篇就到这里。

    注:

    项目之间引用关系:

    SequentialWorkFlowLibrary -->WorkFlowActivityLibrary

    WindowsFormsApplication -->SequentialWokflowLibrary

                                -->System.WorkFlow.Activites

                                   --->System.WorkFlow.ComponentModel

                                   --->System.WorkFlow.Runtime

    workflowActivityLibrary ---->WindowsForm


    相关的WF的文章

    http://dudu.cnblogs.com/archive/2005/11/18/279691.html

    相关电子书(下载链接见文章底部,谢谢)


                         >>>>>>>WWF书下载<<<<<<<<

  • 相关阅读:
    w10更新
    java.lang.Integer cannot be cast to java.math.BigDecimal
    加法add 乘法multiply
    iterator,hasNext,next
    购物车全部数据,带商品信息
    ERRORinit datasource error, url: jdbc:mysql://localhost:3306/xxxxxx?useUnicode=true&characterEncoding=gbk&serverTimezone=GMT&useSSL=false
    Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:
    创建一个场景
    window系统已发布,等待更新
    [转]向量(矩阵)范式理解(0范式,1范式,2范式,无穷范式)
  • 原文地址:https://www.cnblogs.com/RuiLei/p/927862.html
Copyright © 2011-2022 走看看