工作流学习笔记-ifElse活动;从工作流中取出返回值;计算器实例
新建一个项目->顺序工作流库
设计面板拖放ifElse活动
点右键,添加三个分支
每个分支的条件设置为声明性规则条件
并设置他们的名称和表达式
代码如下:
using System; using System.ComponentModel; using System.ComponentModel.Design; 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 WorkflowLibrary1 { public sealed partial class Workflow1: SequentialWorkflowActivity { public string Operation { get ; set ; } public int Number1 { get ; set ; } public int Number2 { get ; set ; } public double Result { get ; set ; } public Workflow1() { InitializeComponent(); } private void codeActivity1_ExecuteCode( object sender, EventArgs e) { Result = Number1 + Number2; } private void codeActivity2_ExecuteCode( object sender, EventArgs e) { Result = Number1 - Number2; } private void codeActivity3_ExecuteCode( object sender, EventArgs e) { Result = Number1 * Number2; } private void codeActivity4_ExecuteCode( object sender, EventArgs e) { if (Number2 != 0) { Result = ( double )Number1 / ( double )Number2; } else { throw new ArgumentException( "除数为0" ); } } private void codeActivity5_ExecuteCode( object sender, EventArgs e) { throw new ArgumentException( "没有找到合适的运算符:{0}" , this .Operation); } } } |
在解决方案中创建windows form项目
设计一个简单的计算器的界面
做代码如下
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Workflow.Runtime; using System.Threading; using WorkflowLibrary1; namespace test { public partial class Form1 : Form { private WorkflowRuntime _wfRuntime; private AutoResetEvent _waitHandle = new AutoResetEvent( false ); //已发生事件 private string _result; public Form1() { InitializeComponent(); initWFRuntime(); //一个appdomain只能初始化一次 } /// <summary> /// 工作流初始化 /// </summary> private void initWFRuntime() { _wfRuntime = new WorkflowRuntime(); _wfRuntime.WorkflowCompleted += new EventHandler<WorkflowCompletedEventArgs>(_wfRuntime_WorkflowCompleted); _wfRuntime.WorkflowTerminated += new EventHandler<WorkflowTerminatedEventArgs>(_wfRuntime_WorkflowTerminated); } void _wfRuntime_WorkflowTerminated( object sender, WorkflowTerminatedEventArgs e) { MessageBox.Show(e.Exception.Message); _waitHandle.Set(); //发生事件已终止 } void _wfRuntime_WorkflowCompleted( object sender, WorkflowCompletedEventArgs e) { _result = e.OutputParameters[ "Result" ].ToString(); _waitHandle.Set(); } private void getResult() { Dictionary< string , object > dic = new Dictionary< string , object >(); dic.Add( "Operation" , textBox2.Text.Trim()); dic.Add( "Number2" , int .Parse(textBox3.Text.Trim())); dic.Add( "Number1" , int .Parse(textBox1.Text.Trim())); WorkflowInstance wfInstance = _wfRuntime.CreateWorkflow( typeof (WorkflowLibrary1.Workflow1), dic); wfInstance.Start(); _waitHandle.WaitOne(); } /// <summary> /// 注册按钮事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load( object sender, EventArgs e) { foreach ( var ctl in this .Controls) { if (ctl is Button) { ((Button)ctl).Click += new EventHandler(Form1_Click); } } } /// <summary> /// 按钮事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void Form1_Click( object sender, EventArgs e) { Button btn = (Button)sender; TextBox tb; if ( string .IsNullOrEmpty(textBox1.Text.Trim())) { tb = textBox1; } else if ( string .IsNullOrEmpty(textBox3.Text.Trim())) { tb = textBox3; } else { tb = textBox1; } switch (btn.Text) { case "1" : case "2" : case "3" : case "4" : case "5" : case "6" : case "7" : case "8" : case "9" : case "0" : tb.Text = btn.Text; break ; case "+" : case "-" : case "*" : case "/" : textBox2.Text = btn.Text; break ; case "=" : getResult(); textBox4.Text = _result; break ; default : break ; } } } } |
分类:
WorkFlow学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统