• 建立简单的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();
                }
            }
        }
    }

      

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

      最后运行,查看结果。


     

  • 相关阅读:
    jquery $(document).ready() 与window.onload的区别
    【Ionic+AngularJS 开发】之『个人日常管理』App(二)
    【Ionic+AngularJS 开发】之『个人日常管理』App(一)
    移动App服务端架构设计
    jQuery 事件用法详解
    CSS实现的几款不错的菜单栏
    css清除浮动的方法总结
    常见浏览器的兼容问题
    推荐两个界面原型设计工具--GUIDesignStudio 和 Mockups For Desktop
    如何用js获取浏览器URL中查询字符串的参数
  • 原文地址:https://www.cnblogs.com/scottckt/p/1849246.html
Copyright © 2020-2023  润新知