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

  

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

  最后运行,查看结果。


 

原文地址:https://www.cnblogs.com/scottckt/p/1849246.html