zoukankan      html  css  js  c++  java
  • 建立简单的workflow程序并说明

       这是工作流的入门程序,基本上每一步都有说明。学会此工作流后对其它工作流就可以触类旁通。

      

      新建一个顺序工作流控制台程序HelloWorkflow。建好后系统默认生成Workflow1.cs文件,此为工作流文件。在Workflow1设计页面的工具箱中拖入code控件,在属生ExecuteCode中输入codeActivity1_ExecuteCode。ExecuteCode表示执行代码。如下图。

     

      在Workflow1.cs的后台代码中编写如下代码。此工作流的目的是在控制台上显示Hello Workflow!。

    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 HelloWorkflow
    {
        
    public sealed partial class Workflow1 : SequentialWorkflowActivity
        {
            
    public Workflow1()
            {
                InitializeComponent();
            }

            
    private void codeActivity1_ExecuteCode(object sender, EventArgs e)
            {
                Console.WriteLine(
    "Hello Workflow!");
            }
        }
    }

    工作流写好后如何调用?请看Program.cs中的代码。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Workflow.Runtime;
    using System.Workflow.Runtime.Hosting;

    namespace HelloWorkflow
    {
        
    class Program
        {
            
    static void Main(string[] args)
            {
                
    //承载工作流的运行时并执行刚才定义的工作流
                using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
                {
                    
    /*AutoResetEvent:用于释放单个等待线程的线程同步类。工作流实际上是在工作流运行时创建并管理的单独线程上执行的,
                     这样做的原因是工作流运行时必须有能力同进处理多个工作流。在本示例中,需要同步两个线程,分别是工作流线程和宿主控制台应用程序的主线程。
                     
    */
                    AutoResetEvent waitHandle 
    = new AutoResetEvent(false);
                    
    //为了让宿主控制台应用程序知道工作流何时完成,代码中订阅了workflowRuntime两个事件。事件使用了匿名委找语法
                    //工作流完成事件
                    workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e)
                    {
                        
    //代码会对AutoResetEvent对象发出信号,通知它释放控制台应用程序。发果发生错误,就触发WorkflowTerminated事件
                        waitHandle.Set();
                    };
                    //工作流异常事件
                    workflowRuntime.WorkflowTerminated 
    += delegate(object sender, WorkflowTerminatedEventArgs e)
                    {
                        
    //显示错误码信息,并释放等待的线程
                        Console.WriteLine(e.Exception.Message);
                        waitHandle.Set();
                    };

                    
    //他建工作流Workflow1实列
                    WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(HelloWorkflow.Workflow1));
                    //启动工作流Workflow1
                    instance.Start();

                    
    //WaitOne:阻止当前线程,直到当前 WaitHandle 收到信号。
                    waitHandle.WaitOne();

                    Console.WriteLine(
    "Press any key to exit");
                    Console.ReadKey();
                }
            }
        }
    }

      

      这样一个简单的工作流就做好了。每一步解释请看代码中的注释。其它工作流的建立和运行方法与此类似。

      最后运行,查看结果。


     

  • 相关阅读:
    记一次事件:由于资源管理器没有关闭所导致数据库挂起
    脚本恢复控制文件
    数据库恢复至某个时间点
    EXPDP/IMPDP
    导入与导出详解
    ORACLE DIRECTORY目录管理步骤
    Linux and Oracle常用目录详解
    omitting directory何意
    在RAC执行相关操作发生ora-01031:insufficient privileges解决方法
    MySQL8.0安装
  • 原文地址:https://www.cnblogs.com/scottckt/p/1849246.html
Copyright © 2011-2022 走看看