工作流编程循序渐进(3:While活动)

作者  朱先忠

一、引言

本文中,我们来学习另一个简单活动--While活动。While活动将会持续循环的执行,直至指定判断为假。

下面,我们来构建一个简单的示例。本示例的目的是,想主要使用While活动实现显示一个九九乘法表。

二、创建控制台顺序工作流示例程序框架

请遵循如下步骤创建一个控制台顺序工作流示例程序:
1. 启动VS2008,单击菜单”文件“|”新建“|”项目“,创建一个名字为WhileActivity的控制台顺序工作流示例程序。
2.之后,系统自动打开工作流设计器界面。
3. 从工具箱中拖动While活动到图中右侧的汉字提示处,得到如图所示的情形。

4. 因为是在控制台中显示一个九九乘法表,所以,一定要使用一个二重循环来实现这一目的。也就是说,我们要使用一个嵌套的While活动。另一方面,我们知 道:外层循环与内层循环变量是存在联系的,即在每一次内循环执行完成后,要重新进行某种初始化操作。因此,直接在一个While活动中嵌入一个While 活动是无法实现既定功能的。

另外需要注意的是,While活动仅允许包括一个子活动

但是,还是有解决办法的,我们可以在While活动中嵌入一个复合活动,即一个允许其中继续包含(可能有多个)子活动的活动,例如并行执行活动(Parallel),串行执行活动(Sequence),等等。

5.  为此,我们最终得到如下的工作流图:

对于打印一个乘法九九表来说,通常我们可以使用如下一个函数实现:

static void MultiplyTable()
{
    int i = 1;
    int j = 1;

for (i = 1; i <= 9; i++)
    {
        for (j = 1; j <= i; j++)
        {
            if (i == j)
            {
                Console.Write("{0} * {1}={2} ", i, j, i * j);
                Console.WriteLine("");
            }
            else
                Console.Write("{0} * {1}={2} ", i, j, i * j);
        }
    }

}

于是,我们会得到如下图所示的打印效果:

下面,我们也想通过工作流操作实现上图打印效果。现在来讨论活动有关属性设置及编码问题。

三、活动有关属性设置及编码

1. 在本例中,我们要使用规则条件表达内外层循环的规则条件。为此,先要定义两个循环变量(以工作流Workflow1)的私有字段的形式存在,如下:

        //创建两个控制内外层循环的变量
        private int i = 0;
        private int j = 1;

2. 单击外、内层两个循环活动whileActivity1和whileActivity2,分别使用属性窗口设置循环的规则条件。以外层循环为例,首先需要选择Condition为“声明性规则条件”。然后,在下面的规则命名中输入名称c1。典型情况(推荐)下,我们单击规则名称c1右边的“...”省略号进入到规则表达式定义对话框,如图所示:

然后,你可以单击“新建”链接创建规则表达式(以后也可以使用“编辑”链接再修改之)。表达式创建窗口如下所示:


[注意]上面的表达式后面不允许有
分号“;”,否则会出现错误提示。

3.同样方式创建内循环活动whileActivity2的规则条件为:

this.j <= this.i

4. 根据前面的算法分析,我们要分别创建内外循环活动的

        private void codeActivity1_ExecuteCode(object sender, EventArgs e)
        {
            j = 1;
            i++;
        }

private void codeActivity2_ExecuteCode(object sender, EventArgs e)
        {
            if (i == j)
            {
                Console.Write("{0} * {1}={2} ", i, j, i * j);
                Console.WriteLine("");
            }
            else
                Console.Write("{0} * {1}={2} ", i, j, i * j);
            j++;
        }

5. 下面是完整的工作流类定义代码:

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 WhileActiviity
{
    public sealed partial class Workflow1 : SequentialWorkflowActivity
    {
        //创建两个控制内外层循环的变量
        private int i = 0;
        private int j = 1;

public Workflow1()
        {
            InitializeComponent();
        }

private void codeActivity1_ExecuteCode(object sender, EventArgs e)
        {
            j = 1;
            i++;
        }

private void codeActivity2_ExecuteCode(object sender, EventArgs e)
        {
            if (i == j)
            {
                Console.Write("{0} * {1}={2} ", i, j, i * j);
                Console.WriteLine("");
            }
            else
                Console.Write("{0} * {1}={2} ", i, j, i * j);
            j++;
        }

private void codeActivity3_ExecuteCode(object sender, EventArgs e)
        {
            Console.Read();
        }

}

}

自不必赘述了吧。

四、运行实例

按F5运行控制台程序,一般顺利的话,将得到如下图所示运行时快照。

转载于:https://blog.51cto.com/zhuxianzhong/203304

工作流编程循序渐进(3:While活动)相关推荐

  1. 工作流编程循序渐进(9:使用本地服务在宿主和工作流之间通信)

    工作流编程循序渐进(9:使用本地服务在宿主和工作流之间通信) 作者  朱先忠 [摘要]       在本篇中,首先详细分析本地服务有关概念,探讨本地服务在工作流运行时.工作流实例及工作流宿主间的地位及 ...

  2. python编写student类_Python艺术编程节——以趣味活动促进学生学习编程

    陈斌 近年来,Python逐渐成为最热门的计算机编程语言之一,如何开展Python语言的编程教学也成为了计算机基础教育领域的热门话题.面向中小学生的编程教学尤其需要激发并培养学生的学习兴趣.因此,在针 ...

  3. “筑梦未来 青少年编程”第四期活动圆满落幕

    近日,由全国高等院校计算机基础教育研究会"青少年编程教育专业委员会".华为云计算技术有限公司.东北师范大学信息科学与技术学院联合举办的"筑梦未来 青少年编程"第 ...

  4. Python神经网络编程 | 专场送书活动

    点击关注 程序IT圈,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 参与文末送书活动,关注公众号福利不断 ~ --程序IT圈 当谷歌的AlphaGo战胜了人类顶级棋手,人工智能开始更多进入大 ...

  5. java编程马拉松比赛_E·活动 | “编程马拉松”编程比赛

    原标题:E·活动 | "编程马拉松"编程比赛 "编程马拉松"编程比赛 为了提高学生们C语言程序设计与开发的能力,增加学生们的学习兴趣. 12月14日,我院格创计 ...

  6. 程序员的训练日记:编程也是一项耐力活动

    全文共1809字,预计学习时长6分钟 图源:unsplash 笔者曾经是一名长跑运动员,当开始编程之后,我发现二者有许多相似之处.于是,我将自己运动员时期的一些训练习惯应用到了当前的"耐力活 ...

  7. UIUC CS241 系统编程中文讲义校对活动 | ApacheCN

    整体进度:https://github.com/apachecn/uiuc-cs241-notes-zh/issues/1 贡献指南:https://github.com/apachecn/uiuc- ...

  8. ios大牛李明杰亲授《从入门到精通Swift编程》限时优惠活动推出!已近600人报名直播课!

    课程简介: Swift,是Apple公司于2014年6月发布的全新编程语言,是第一个既满足工业标准又像脚本语言一样充满表现力和趣味的编程语言.从Swift面世那一刻起,就受到了全世界各地开发者的热捧和 ...

  9. 《Windows编程循序渐进》——对话框应用程序

    博文内容中字符过多,拒绝显示 转载于:https://www.cnblogs.com/predator-wang/p/5667823.html

最新文章

  1. 前端 要了解是的事情
  2. 2204 Problem A(水)
  3. idea项目没法继承httpservlet_intelj idea社区版开发web项目
  4. Workbox.strategies v3.x 中文版
  5. Python入门-散点图绘制
  6. 中文信息处理——初始概率,发射概率,转移概率
  7. 世界之窗如何保存html,世界之窗(文字版)
  8. SpringMVC + AJAX 实现多文件异步上传
  9. 2019中国旅游与酒店风云榜酒店业榜单公布
  10. 暗黑管理系列:发红包的管理杠杆率和量级作用
  11. Elasticsearch 之(6)kibana嵌套聚合,下钻分析,聚合分析
  12. CCF关于举办2019年NOI教师培训(首师附中)的通知
  13. UE学习笔记01(3月)
  14. 深度学习目标检测数据集下载
  15. php同步登陆方案,ucenter同步登陆机制_PHP教程
  16. BLDC-坐标变换(Clark,Park,反Park)
  17. 【内存】内存对齐 的原理
  18. Python搭建博客网站小结
  19. 麻省理工研究发现,商业人工智能存在严重的性别和肤色歧视
  20. Java常用框架学习

热门文章

  1. androidstudio返回之前界面_charles 如何修改服务器返回内容 - Breakpoints
  2. mysql 密码加密windows_Windows下mysql数据库的安装及8.0以上版本设置密码的命令(简易教学)...
  3. python自带模块连接数据库_Python模块Sqlite数据库模块
  4. windows照片查看器无法显示此图片_Real3d PhotoViewer下载-照片查看器 v1.2.2 官方版...
  5. 基于pxe+dhcp+ks实现自动安装系统
  6. 重新更新了,账号都丢了,重新找回的
  7. BeanFactory笔记
  8. ios 视频旋转---分解ZFPlayer
  9. 往数据库的表中插入新行
  10. 《代码大全》阅读笔记02