程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 工作流編程循序漸進(3:While活動)

工作流編程循序漸進(3:While活動)

編輯:關於C#

一、引言本文中,我們來學習另一個簡單活動--While活動。While活動將會持續循環的執行,直至指定判斷為假。

下面,我們來構建一個簡單的示例。本示例的目的是,想主要使用While活動實現顯示一個九九乘法表。

二、創建控制台順序工作流示例程序框架

請遵循如下步驟創建一個控制台順序工作流示例程序:

1.啟動VS2008,單擊菜單”文件“|”新建“|”項目“,創建一個名字為WhileActivity的控制台順序工作流示例程序。

2.之後,系統自動打開工作流設計器界面。

3.從工具箱中拖動While活動到圖中右側的漢字提示處,得到如圖所示的情形。

4.因為是在控制台中顯示一個九九乘法表,所以,一定要使用一個二重循環來實現這一目的。也就是說,我們要使用一個嵌套的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運行控制台程序,一般順利的話,將得到如下圖所示運行時快照。

出處: http://zhuxianzhong.blog.51cto.com/157061/203304

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved