工作流学习笔记-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月前
|
JSON 算法 前端开发
2726. 使用方法链的计算器
2726. 使用方法链的计算器
41 0
|
4月前
|
敏捷开发 Java 测试技术
阿里云云效产品使用合集之后置清理操作的触发判断条件是什么
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
6月前
|
数据采集 分布式计算 DataWorks
DataWorks产品使用合集之赋值节点output是有数据的,引用参数运行打印时是空的,该如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
41 4
|
4月前
|
存储 运维 Java
函数计算产品使用问题之怎么配置定时触发器来调用Java函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
Java Serverless Docker
函数计算操作报错合集之创建 bodySyream时报错,是什么原因
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
运维 Serverless 测试技术
函数计算产品使用问题之如何配置一个应用对应多个函数
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
5月前
|
SQL 运维 分布式计算
DataWorks产品使用合集之ODPPS中如何使用SQL查询从表中获取值并将其赋值给临时变量以供后续使用
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
缓存 运维 JavaScript
函数计算产品使用问题之要在一个应用中创建多个函数,该如何操作
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
监控 算法 Serverless
函数计算操作报错合集之部署的pthon服务时,遇到报错,是什么原因
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
6月前
|
SQL DataWorks 安全
DataWorks产品使用合集之三种运行按钮关于变量赋值区别是什么
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
45 0