欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/4/16 编程问答 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 工作流编程循序渐进(3:While活动) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

工作流编程循序渐进(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活动)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。