XOML方式创建和启动工作流 <第十篇>

一、XOML使用工作流的好处

  通过Xoml方式使用工作流的好处在于,它能够不重新启动程序的情况下,仅仅通过配置xoml就能够实现改变工作流,非常灵活。

  

  创建一个WinForm程序如下:

  

  代码如下:

namespace WinForm
{
    public partial class Form1 : Form
    {
        //定义工作流运行时Runtime容器
        WorkflowRuntime workflowRuntime = new WorkflowRuntime();

        public Form1()
        {
            InitializeComponent();
            workflowRuntime.StartRuntime();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //新建一个工作流
            SequenceActivity workflow = new SequenceActivity();
            workflow.Activities.Add(new MyActivity() { Message = "我已经执行啦!" });
            WorkflowMarkupSerializer serializer = new WorkflowMarkupSerializer();
            //将工作流保存在Xml文件里面
            using(XmlWriter xr = XmlWriter.Create("MyWorkflow.xoml", new XmlWriterSettings() { CloseOutput = true })){
                serializer.Serialize(xr, workflow);
            }
            MessageBox.Show("工作流创建成功!");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //从Xml文件上执行工作流,如果你愿意,你可以将Xml数据保存在任何地方,甚至是保存在数据库里面
            //然后从数据库里面读出工作流,然后执行
            WorkflowInstance winstance = workflowRuntime.CreateWorkflow(XmlReader.Create("MyWorkflow.xoml"));
            winstance.Start();
        }
    }

    public partial class MyActivity : Activity
    {
        public string Message { get; set; }

        protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            MessageBox.Show(Message);
            return base.Execute(executionContext);
        }
    }
}

  效果如下:

  

  基于这种方式,可以实现制作出一套易操作的UI界面,让用户去配置流程,然后将生成的流程保存在Xml、字符串、数据库中。然后实现读取出流程,然后执行的目的。

  结合XmlReader的重载,可以实现,只有一个字符串,就能够启动流程:

    var xmlStr = "<?xml version=\"1.0\" encoding=\"utf-8\"?><SequenceActivity x:Name=\"SequenceActivity\" xmlns:ns0=\"clr-namespace:WinForm;Assembly=WinForm, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/workflow\"><ns0:MyActivity Message=\"我已经执行啦!\" x:Name=\"myActivity1\" /></SequenceActivity>";
    WorkflowInstance winstance = workflowRuntime.CreateWorkflow(XmlReader.Create(new StringReader(xmlStr)));
    winstance.Start();
时间: 2024-08-05 08:36:43

XOML方式创建和启动工作流 <第十篇>的相关文章

通过XOML或者XAML的方式创建和启动工作流

在Workflow Foundation中,提供了多种设计工作流的方式.例如 纯代码的方式(C#) 代码分离的方式(XOML+C#) 以上两种,可以从Visual Studio提供的项目模板中选择 他们在设计器中看起来是如下的 xoml是一种特殊的XML格式,它可以描述流程.例如下面这样的一个流程 它用XOML描述的话,大致如下 <SequentialWorkflowActivity x:Class="WorkflowConsoleApplication1.Workflow2"

【转】使用命令行方式创建和启动android模拟器

原文网址:http://blog.csdn.net/tiandinilv/article/details/8953001 1.Android模拟器介绍 Android中提供了一个模拟器来模拟ARM核的移动设备.Android的模拟器是基于QEMU开发的,QEMU是一个有名的开源虚拟机项目(详见http://bellard.org/qemu/),它可以提供一个虚拟的ARM移动设备.Android模拟器被命名为goldfish,用来模拟包括下面一些功能的ARM SoC: * ARM926ej-S C

Java并发编程之线程创建和启动(Thread、Runnable、Callable和Future)

这一系列的文章暂不涉及Java多线程开发中的底层原理以及JMM.JVM部分的解析(将另文总结),主要关注实际编码中Java并发编程的核心知识点和应知应会部分. 说在前面,Java并发编程的实质,是线程对象调用start方法启动多线程,而线程对象则必须是Thread类或其子类实现.Runnable和Callable的作用类似于Comparable.Serializable,是用于被并发的类实现的接口,从而使得Thread类可以在初始化时传入这个被并发的类.此是大前提.本文从多线程实现和启动出发,对

第二十篇:DDR内存读写问题

最近在实际的项目中碰到这样的问题: 嵌入式系统DDR (RBC row, bank, columne), 每块1Gbit816, 两块由片选决定读写其中的一块. Memory controller通过AXI连接在SOC中. 1. 在I-CACHE没有使能的情况下, 通过MC访问DDR有三路TRAFFIC, 分别是取指令, CPU刷/写FRAME BUFFER, DMA取/读FRAME BUFFER的数据 在低分辨率的情况下, 没有发现图像闪烁, 到了高分辨率的情况(1680*1050 60p,

03_线程的创建和启动_实现Runnable接口方式

[线程的创建和启动的步骤(实现Runnable接口方式)] 1.定义Runnable接口的实现类,并重写其中的run方法.run()方法的方法体是线程执行体.class SonThread  implement Runnable{ public void run(){......}} 2.创建Runnable接口实现类的实例.   sonThread s1=new SonThread(); 3.用该实例作为Thread的target来创建Thread对象.   Thread t1 =new Th

02_线程的创建和启动_继承Thread方式

[简述] java使用Thread类代表线程,所有的线程都必须是Thread或者其子类的实例. 每个线程的任务就是完成一定的任务,实际上就是执行一段程序流. [创建并启动多线程的步骤(集成Thread类方式)] 1.定义继承Thread类的子类,重写run方法:run()方法就代表了线程需要完成的任务,故run()方法称为:线程执行体. 2.创建线程对象:即创建Thread子类的实例. 3.启动线程:调用线程对象的start()方法来. [示例代码FirstThread.java] packag

如何创建、启动OC4J服务器

Java中常用的Web服务器有很多,今天我在这里记录一下如何创建.启动.部署OC4J服务器.当然创建.启动.部署服务器的方式有很多种,我只介绍一下我用的这种.具体步骤如下: 1 下载OC4J的服务器文件压缩文件,并解压. 2 确保oc4j配置文件的正确性,这里需要确定两个条件: a. 必须确保JDK版本在1.6(包含)以下 b. 确保oc4j_extended_101330\bin 目录下的 oc4j.cmd 文件中配 置正确 ORACLE_HOME:必须配置为oc4j文件夹的路径 JAVA_H

Mac OS X中,有三种方式来实现启动项的配置

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 22.0px "Times New Roman"; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Times New Roman"; color: #000000 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0p

SSH(Struts2+Spring+Hibernate)框架搭建流程&lt;注解的方式创建Bean&gt;

此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblogs.com/wkrbky/p/5912810.html 一.Hibernate(数据层)的搭建: 实现流程 二.Spring(注入实例)的使用: 实现流程 三.Struts2(MVC)的搭建: 实现流程 这里注意一点问题: Struts2与Hibernate在一起搭建,antlr包,有冲突.MyE