天天看點

工作流程式設計循序漸進(3:While活動)工作流程式設計循序漸進(3:While活動)

作者  朱先忠

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

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

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

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

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

4. 因為是在控制台中顯示一個九九乘法表,是以,一定要使用一個二重循環來實作這一目的。也就是說,我們要使用一個嵌套的While活動。另一方面,我們知 道:外層循環與内層循環變量是存在聯系的,即在每一次内循環執行完成後,要重新進行某種初始化操作。是以,直接在一個While活動中嵌入一個While 活動是無法實作既定功能的。

另外需要注意的是,<b>While活動僅允許包括一個子活動</b>。

但是,還是有解決辦法的,我們可以在While活動中嵌入一個<b>複合活動</b>,即一個允許其中繼續包含(可能有多個)子活動的活動,例如并行執行活動(Parallel),串行執行活動(Sequence),等等。

5.  為此,我們最終得到如下的工作流圖:

對于列印一個乘法九九表來說,通常我們可以使用如下一個函數實作:

static void MultiplyTable()

{

    int i = 1;

    int j = 1;

    for (i = 1; i &lt;= 9; i++)

    {

        for (j = 1; j &lt;= i; j++)

        {

            if (i == j)

            {

                Console.Write("{0} * {1}={2} ", i, j, i * j);

                Console.WriteLine("");

            }

            else

        }

    }

}

于是,我們會得到如下圖所示的列印效果:

下面,我們也想通過工作流操作實作上圖列印效果。現在來讨論活動有關屬性設定及編碼問題。

1. 在本例中,我們要使用規則條件表達内外層循環的規則條件。為此,先要定義兩個循環變量(以工作流Workflow1)的私有字段的形式存在,如下:

        //建立兩個控制内外層循環的變量

        private int i = 0;

        private int j = 1;

2. 單擊外、内層兩個循環活動whileActivity1和whileActivity2,分别使用屬性視窗設定循環的規則條件。以外層循環為例,首先需要選擇Condition為“聲明性規則條件”。然後,在下面的規則命名中輸入名稱c1。典型情況(推薦)下,我們單擊規則名稱c1右邊的“...”省略号進入到規則表達式定義對話框,如圖所示:

然後,你可以單擊“建立”連結建立規則表達式(以後也可以使用“編輯”連結再修改之)。表達式建立視窗如下所示:

<b></b>

[注意]上面的表達式後面不允許有<b>分号</b><b>“;”,否則會出現錯誤提示。</b>

3.同樣方式建立内循環活動whileActivity2的規則條件為:

<b>this.j &lt;= this.i</b>

4. 根據前面的算法分析,我們要分别建立内外循環活動的

        private void codeActivity1_ExecuteCode(object sender, EventArgs e)

            j = 1;

            i++;

        private void codeActivity2_ExecuteCode(object sender, EventArgs e)

            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

        //建立兩個控制内外層循環的變量

        public Workflow1()

            InitializeComponent();

        private void codeActivity3_ExecuteCode(object sender, EventArgs e)

            Console.Read();

自不必贅述了吧。

按F5運作控制台程式,一般順利的話,将得到如下圖所示運作時快照。

本文轉自朱先忠老師51CTO部落格,原文連結:http://blog.51cto.com/zhuxianzhong/203304 ,如需轉載請自行聯系原作者

繼續閱讀