工作流学习笔记-ifElse活动;从工作流中取出返回值;计算器实例

简介: 新建一个项目->顺序工作流库 设计面板拖放ifElse活动 点右键,添加三个分支 每个分支的条件设置为声明性规则条件 并设置他们的名称和表达式 代码如下: using System; using System.

新建一个项目->顺序工作流库

设计面板拖放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;
            }
        }
    }
}

目录
相关文章
|
7月前
循环脚本的实践实例
循环脚本的实践实例
18 1
|
13天前
|
存储 Java 关系型数据库
定时任务配置技巧:将表达式配置在业务员代码之外的方法
该文档介绍了三种不同的方法来定义和管理Java中的定时任务。首先,通过在数据库中创建一个表来存储定时任务的执行周期,并在Spring Boot应用中使用`@Scheduled`注解配合数据库查询来动态执行定时任务。其次,将定时任务的配置移动到Apollo配置中心,利用Apollo的配置能力来控制定时任务的执行。最后,使用Quartz框架并结合Apollo配置文件,动态地管理定时任务的触发间隔和执行时间。此外,还提到了在多机器环境中,可以使用分布式锁来避免任务重复,并推荐了xxl-JOB和elastic-job作为更专业的定时任务解决方案。
27 2
|
5月前
Axure快速入门(09) -变量和表达式(计算商品总价例子)
Axure快速入门(09) -变量和表达式(计算商品总价例子)
44 0
|
8月前
宜搭中,通过代码赋值后触发子表单的多行公式编辑
宜搭中,通过代码赋值后触发子表单的多行公式编辑
240 1
|
Serverless
函数工作流
函数工作流自制脑图
87 0
函数工作流
|
Java
Java初学者作业——定义一个计算器类, 实现计算器类中加、 减、 乘、 除的运算方法, 每个方法能够接收2个参数。
Java初学者作业——定义一个计算器类, 实现计算器类中加、 减、 乘、 除的运算方法, 每个方法能够接收2个参数。
509 0
Java初学者作业——定义一个计算器类, 实现计算器类中加、 减、 乘、 除的运算方法, 每个方法能够接收2个参数。
|
调度
错误:“产品订单的调度参数没有被定义”
信息错误信息:产品订单的调度参数没有被定义消息号 CT604诊断在定制工厂1000,订单类型ZP91和生产调度员*的过程中,没有为生产订单定义计划级别。只有输入了详细计划、粗略计划或生产率计划的选择标识,才能实施计划。
1410 0
|
数据管理 Java 大数据
R 高级数据管理—重复和循环、条件执行、转置| 学习笔记
快速学习 R 高级数据管理—重复和循环、条件执行、转置
164 0
P3项目全球模板狗血设置之二 --- 移动类型523收货不能自动创建批次号
P3项目全球模板狗血设置之二 --- 移动类型523收货不能自动创建批次号
P3项目全球模板狗血设置之二 --- 移动类型523收货不能自动创建批次号
SAP C4C工作流(Workflow)接收方自动决定的一个例子
SAP C4C工作流(Workflow)接收方自动决定的一个例子
SAP C4C工作流(Workflow)接收方自动决定的一个例子