一、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();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现